思路
主要思路是:满二叉树的高度为h,那么它的节点数为2h-1
所以按照二叉树递归套路,创建Info类,其中保存当前节点的高度和其下节点数
代码实现
public class Code04_IsFull {
public static class Node {
public int value;
public Node left;
public Node right;
public Node(int data) {
this.value = data;
}
}
public static class Info {
// 记录高度
public int height;
// 记录节点数
public int nodes;
public Info(int h, int n) {
height = h;
nodes = n;
}
}
public static boolean isFull(Node head) {
if (head == null) {
return true;
}
Info all = process(head);
// 判断二叉树高度与节点的高度的关系
return (1 << all.height) - 1 == all.nodes;
}
public static Info process(Node head) {
if (head == null) {
return new Info(0,0);
}
// 拿到左右子树的信息
Info leftInfo = process(head.left);
Info rightInfo = process(head.right);
// 得到当前节点高度
int height = Math.max(leftInfo.height, rightInfo.height) + 1;
// 得到当前节点为根下子树包括当前节点的节点数
int nodes = leftInfo.nodes + rightInfo.nodes + 1;
return new Info(height, nodes);
}
}