完全二叉树的判断

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

 

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

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  阅读(312)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示