LeetCode958. 二叉树的完全性检验(中等)

题目

给定一个二叉树,确定它是否是一个完全二叉树。

百度百科中对完全二叉树的定义如下:

若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)

image-20211011152636293

解法

思路:

  1. 层次遍历二叉树,遇到第一个左右不全空的节点,则做上标记
  2. 如果存在节点左孩子为空,右孩子不为空,则返回false 代码(l == null && r != null)
  3. 再2不违规情况下,第一个左右孩子都为空的节点,且后续节点皆为叶节点才是完全二叉树 代码(index && (l != null || r != null))
class Solution {
    //思路:二叉树的层次遍历
    public boolean isCompleteTree(TreeNode root) {
      return widthOrder(root); 
    }
    public boolean widthOrder(TreeNode root){
        if(root == null){
          return false;
        }
        //1.如果任意一个节点有右子树无左子树 false
        //2.再条件1不违规情况下,第一个左右孩子都为空的节点,且后续节点皆为叶节点才是完全二叉树
        LinkedList<TreeNode> list = new LinkedList<>();
        list.add(root);
        boolean index = false;  //是否遇到左右孩子不双全的节点
        TreeNode l = root.left;
        TreeNode r = root.right;
        while(!list.isEmpty()){
            TreeNode cur = list.poll();
            l = cur.left;
            r = cur.right;
            //上述2个条件的转换代码 (l != null || r != null)如果为true则不是叶节点
            if((l == null && r != null) || (index && (l != null || r != null))){
                return false;
            }
            if(l != null){
                list.add(l);
            }
            if(r != null){
                list.add(r);
            }
            if(l == null || r == null){
                index = true;
            } 
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值