【java】判断一棵树是否是完全二叉树

it2022-05-08  8

二叉树是数据结构中很重要的部分,本文主要是介绍一下如何判断一个是完全二叉树。 判断完全二叉树是建立在树的层序遍历的基础上,如果对层序遍历不太掌握,可以看一下我的另一篇博客: Java–完全二叉树、普通二叉树的创建以及树的前序、中序、后序、层序遍历的递归和非递归方法实现

复习一下: 完全二叉树的特点: 1.叶子节点只出现在最下面两层 2.最下层的叶子一定集中在左部连续位置 3.倒数第二层若有叶子节点,一定都在右部连续位置 4.如果节点度为1,则该节点只有左孩子,即不存在只有右孩子的情况 5.同样节点数的二叉树,完全二叉树的深度最小

判断二叉树主要是利用层序遍历(利用队列实现层序遍历!!!) 假设我们在层序遍历的时候将null也放进队列中,那么遍历的结果会是什么样子呢? 以上面的图为例:(#代表null) 完全二叉树:ABCDE###### 普通二叉树:ABCDEF##GH####### 很明显,完全而二叉树在遇到第一个#后,后面所有的遍历结果都是#,而普通的二叉树在遇到第一个#后,后面除了#还有节点,因此可以利用这个特点来判断完全二叉树。

下面是主要代码:

/** class TreeNode{ char val; TreeNode left; TreeNode right; public TreeNode(char val){ this.val=val; this.left=null; this.right=null; } public TreeNode(){ } } */ public boolean isCompleteTree(TreeNode root){ if(root == null || (root.left == null && root.right == null)){ return true; } Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); TreeNode node = null; while(!queue.isEmpty()){ node = queue.peek(); if(node.left != null){ queue.add(node.left); }else{ break; } if(node.right != null){ queue.add(node.right); }else{ break; } queue.poll(); } if(queue.peek().right == null){ queue.poll(); } while(!queue.isEmpty()){ node = queue.poll(); if(node.left != null || node.right != null){ return false; } } return true; }

恩。。。。总结的有点乱,可以稍微看图理解我的代码

最后,如果有错误,,,,希望及时指正,谢谢!


最新回复(0)