1、二叉树按层遍历
2、如果一个节点有右孩子而无左孩子,则不是完全二叉树。
3、如果一个节点有左孩子而无右孩子,或则左右孩子都没有,则其后面所遇到的节点都必须是叶节点。
import java.util.LinkedList;
import java.util.Queue;
public class TreeNode {
public static class Node {
private String number;
private Node left;
private Node right;
public Node(String number, Node leftNode, Node rightNode) {
this.number = number;
this.left = leftNode;
this.right = rightNode;
}
}
public static void creadNodeNode() {
Node Node7 = new Node("7", null, null);
Node Node6 = new Node("6", null, null);
Node Node5 = new Node("5", null, null);
Node Node4 = new Node("4", null, null);
Node Node3 = new Node("3", Node6, Node7);
Node Node2 = new Node("2", Node4, Node5);
Node Node1 = new Node("1", Node2, Node3);
boolean isCBT = getIsCBT(Node1);
System.out.println(isCBT);
}
public static boolean getIsCBT(Node node) {
if (null == node)
return true;
Queue<Node> queue = new LinkedList();
queue.offer(node);
boolean start = false;//开始以后的节点都必须是叶节点
while (!queue.isEmpty()) {
Node poll = queue.poll();
Node left = poll.left;
Node right = poll.right;
if (null == left && null != right) {
return false;
}
if (start && (null != left || null != right)) {
return false;
}
if (null != left) {
queue.offer(left);
}
if (null != right) {
queue.offer(right);
}
if (null == left || null == right) {
start = true;//开启叶节点验证
}
}
return true;
}
public static void main(String[] args) {
creadNodeNode();
}
}