完全二叉树的判断
完全二叉树概念:
一颗近似满的二叉树,一定要保证前个结点的左右儿子都满的情况下,才可以继续向下层递伸
判断一颗树是否为完全二叉树:
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~