完全二叉树的判断

完全二叉树概念:
一颗近似满的二叉树,一定要保证前个结点的左右儿子都满的情况下,才可以继续向下层递伸

 

判断一颗树是否为完全二叉树:

1.先判断它是否存在节点,该节点的左儿子为空,而右儿子不为空,如果存在则返回false

2.在没有1的情况下,如果发现第一个左右儿子不全的节点(双空或是左不空右空),则后续遍历到的节点都是叶子节点(即左右儿子均为空)


代码及解析:

复制代码
 1 public static boolean isCBT(Node root) {
 2         if (root == null) {
 3             return false;
 4         }
 5         //已宽度优先遍历为基准进行处理
 6         Queue<Node> q = new LinkedList<>();
 7         boolean leaf = false;//用于判断是否后续节点一定要是叶子节点
 8         q.add(root);
 9         while (q.size() > 0) {
10             Node t = q.poll();
11             Node l = t.left;
12             Node r = t.right;
13             if (l != null) {
14                 q.add(l);
15             }
16             if (r != null) {
17                 q.add(r);
18             }
19             if ((leaf == true && (l != null || r != null)) ||  //后续一定要叶子节点,但不是叶子节点
20                  (l == null && r != null)) {//左节点不为空,但右节点为空
21                 return false;
22             }
23             if (l != null || r != null) {//说明这个节点已经不满,后续的节点一定都是叶子节点
24                 leaf = true;
25             }
26         }
27         return true;
28     }
复制代码

 

posted @   jue1e0  阅读(311)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示