判断一棵树是否是完全二叉树
Posted 程序员弹药库
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一棵树是否是完全二叉树相关的知识,希望对你有一定的参考价值。
判断一棵树是否是完全二叉树
根据完全二叉树的定义,如果二叉树上某个结点有右孩子无左孩子则一定不是完全二叉树;否则如果二叉树上某个结点有左孩子而没有右孩子,那么该结点所在的那一层上,该结点右侧的所有结点应该是叶子结点,否则不是完全二叉树。
import java.util.LinkedList;
import java.util.Queue;
/**
* 判断是否为完全二叉树
*/
public class IsCompleteBTree {
public static class Node {
int data;
Node left;
Node right;
public Node(int data) {
this.data = data;
}
}
public static boolean isCompleteBTree(Node root) {
if (root == null) {
return true;
}
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
boolean leaf = false;
while (!queue.isEmpty()) {
Node node = queue.poll();
//左空右不空
if (node.left == null && node.right != null) {
return false;
}
//如果开启了叶子结点阶段,结点不能有左右孩子
if (leaf &&
(node.left != null || node.right != null)) {
return false;
}
//将下一层要遍历的加入到队列中
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
} else {
//左右均为空,或左不空右空。该结点同层的右侧结点均为叶子结点,开启叶子结点阶段
leaf = true;
}
}
return true;
}
public static void main(String[] args) {
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.right = new Node(4);
System.out.println(isCompleteBTree(root));//false
}
}
以上是关于判断一棵树是否是完全二叉树的主要内容,如果未能解决你的问题,请参考以下文章