LintCode 467 [Complete Binary Tree]

原題

檢查一棵二叉樹是不是完全二叉樹。完全二叉樹是指一棵樹除了最后一層,其它層上節點都有左右孩子,最后一層上,所有節點都必須盡量靠左。

樣例

    1
   / \
  2   3
 /
4

是完全二叉樹

    1
   / \
  2   3
   \
    4

不是完全二叉樹

解題思路

  • 理清思路:
  • 滿二叉樹:每個節點都有0或是2個孩子。
  • 完全二叉樹:所有的葉子都擁有同的深度,所有的內部節點擁有 2個孩子
  • BFS - 廣度優先搜索,對于一棵樹,層層遍歷,把每層的節點從左向右依此加入Stack,然后把Stack上層的None彈出,最后檢查如果Stack中還有None說明不是Complete Tree
  • 比如上面的不完全二叉樹生成的數組為[1, 2, 3, None, 4, None, None],將右側None彈出后為[1, 2, 3, None, 4],循環查找,發現還有None存在,所以是不完全二叉樹

完整代碼

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        this.val = val
        this.left, this.right = None, None
"""
class Solution:
    """
    @param root, the root of binary tree.
    @return true if it is a complete binary tree, or false.
    """
    def isComplete(self, root):
        # Write your code here
        if not root:
            return True
        list = [root]
        index = 0
        while index < len(list):
            if list[index]:
                list.append(list[index].left)
                list.append(list[index].right)
            index += 1
                
        while list[-1] is None:
            list.pop()
            
        for node in list:
            if node is None:
                return False
        return True
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,480評論 1 31
  • 編譯環境:python v3.5.0, mac osx 10.11.4 前述內容: 線性表 隊列 堆棧 線性結構...
    擲骰子的求閱讀 2,486評論 1 7
  • 一直以來,我都很少使用也避免使用到樹和圖,總覺得它們神秘而又復雜,但是樹在一些運算和查找中也不可避免的要使用到,那...
    24K男閱讀 6,780評論 5 14
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,148評論 0 12
  • 蓮花開落 季節交錯 詩人的腳步抒寫著落寞 風兒吹過 羞紅了臉 你依然不愿把心事訴說 你滿懷期待 睜大了眼睛的輪廓 ...
    上官飛鴻閱讀 361評論 7 14