二叉树——判断一棵树是否是完全二叉树

二叉树按层遍历

判断条件:结点的左右孩子只有4种情况

其中的三种情况有特例

条件1.结点有右孩子,没有左孩子,直接返回false

条件2.结点左右孩子不全(有左没右,左右都没有),则后面遇到的所有结点,都必须是叶节点

只要不违反1.2的,就是完全二叉树

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class IsCBTTree {
    public static boolean isCBTTree(Tree tree){
        if(tree == null) return true;
 
        //是否开启叶子结点,之后如果遇到不是叶子结点时,就不是完全二叉树
        boolean isLeaf = false;
 
        Queue<Tree> queue = new LinkedList<>();
        queue.offer(tree);
        while(!queue.isEmpty()){
            tree = queue.poll();
            Tree l = tree.left;
            Tree r = tree.right;
            if((l == null && r != null) || (isLeaf && (l != null || r != null))){
                return false;
            }
 
            if(l != null){
                queue.offer( l );
            }
 
            if(r != null){
                queue.offer( r );
            }
 
            if(l == null || r == null){
                isLeaf = true;
            }
        }
        return true;
    }
}

  

posted @   SkyeAngel  阅读(2329)  评论(0编辑  收藏  举报
编辑推荐:
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
阅读排行:
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解
点击右上角即可分享
微信分享提示