二叉树-7.9 完全二叉树判断

该文章提供了一个算法来判断一棵二叉树是否为完全二叉树。完全二叉树的特征是所有层都是满的,除了可能的最后一层,且最后一层的所有节点都靠左排列。算法使用层次遍历,检查节点的左右子节点是否存在,确保符合完全二叉树的条件。
摘要由CSDN通过智能技术生成

题目:

有一棵二叉树,请设计一个算法判断它是否是完全二叉树。

给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。

测试用例:

输入:{1,2,3,4}

输出:True

输入:{1,2,3,null,4}

输出:False

思路:

完全二叉树,其空缺的结点必然集中在右侧。因此如果一个结点有左孩子却没有右结孩子,则必然不是完全二叉树;如果完全二叉树中一个结点没有右孩子,那么它右侧的结点一定全是叶子结点(没有左右孩子) ,否则也不是完全二叉树。可以用层次遍历的方法,当出队的结点右孩子为空时,在之后出队的结点一定叶子节点。

代码: 

class CheckCompletion:
    def chk(self, root):
        # write code here
        q = [root]
        isleaf = False
        while q:
            cur = q.pop(0)
            if isleaf and (cur.left or cur.right):
                return False
            if not cur.left and cur.right:
                return False
            if cur.left:
                q.append(cur.left)
            if cur.right:
                q.append(cur.right)
            else:
                isleaf = True
        return True

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值