二叉树——判断一棵树是否是完全二叉树
二叉树按层遍历
判断条件:结点的左右孩子只有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 ; } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解