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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,784评论 1 31
  • 编译环境:python v3.5.0, mac osx 10.11.4 前述内容: 线性表 队列 堆栈 线性结构...
    掷骰子的求阅读 2,754评论 1 7
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,867评论 5 14
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,392评论 0 12
  • 莲花开落 季节交错 诗人的脚步抒写着落寞 风儿吹过 羞红了脸 你依然不愿把心事诉说 你满怀期待 睁大了眼睛的轮廓 ...
    上官飞鸿阅读 407评论 7 15

友情链接更多精彩内容