简述Java实现完全二叉树判断(层序遍历) ?
参考答案:
完全二叉树是一种特殊的二叉树,其特性是:若设二叉树的深度为h,除第h层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有结点,并且结点都是从左到右依次排布的,这就是完全二叉树。
判断一个二叉树是否为完全二叉树,可以使用层序遍历(BFS)的方式。下面是一个简单的Java实现:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class Solution {
public boolean isCompleteTree(TreeNode root) {
if (root == null) {
return true;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
boolean flag = false; // 标记是否遇到了空节点
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
// 如果已经遇到了空节点,但当前节点不是空节点,则不是完全二叉树
if (flag && node != null) {
return false;
}
// 如果当前节点为空,则标记flag为true
if (node == null) {
flag = true;
} else {
// 将当前节点的左右子节点加入队列
queue.offer(node.left);
queue.offer(node.right);
}
}
return true;
}
}
在这个代码中,我们首先创建了一个队列来进行层序遍历。然后,我们遍历这个队列,对于每个节点,如果它已经遇到了空节点(即flag
为true
),但当前节点不是空节点,那么这就不是一个完全二叉树。如果当前节点为空,我们就将flag
设为true
。否则,我们就将当前节点的左右子节点加入队列。
这样,当我们遍历完所有的节点后,如果flag
为true
且没有返回false
,那么这个二叉树就是一个完全二叉树。