//二叉树的最大深度
public int maxDeepth(Node node) {
if (node==null) {
return 0;
}
int left=maxDeepth(node.left);
int right=maxDeepth(node.right);
return Math.max(left, right)+1;// 这里的1 指的就是当前节点的高度为1
}
//二叉树的节点个数
public int numsOfNode(Node node) {
if (node==null) {
return 0;
}
int left=numsOfNode(node.left);
int right=numsOfNode(node.right);
return left+right+1;
}
//二叉树叶子节点的个数
public int numsOfLeafNode(Node node) {
if (node==null) {
return 0;
}
if (node.left==null&&node.right==null) {
return 1;
}
return numsOfLeafNode(node.left)+numsOfLeafNode(node.right);
}
//二叉树第K层节点的个数
public int numsOfKthLevel(Node node,int k) {
if (node==null||k<1) {
return 0;
}
if (k==1) {
return 1;
}
return numsOfKthLevel(node.left, k-1)+numsOfKthLevel(node.right, k-1);
}
//判断二叉树是否是平衡二叉树
public boolean isBalancedTree(Node node) {
return maxDeepth2(node)!=-1;
}
int maxDeepth2(Node node){
if(node == null){
return 0;
}
int left = maxDeepth2(node.left);
int right = maxDeepth2(node.right);
if(left==-1||right==-1||Math.abs(left-right)>1){
return -1;
}
return Math.max(left, right) + 1;
}
//判断二叉树是否是平衡二叉树
public boolean isBalancedTree1(Node node) {
if (node==null) {
return true;
}
//参见第一个方法求二叉树的最大高度
int left = maxDeepth(node.left);
int right = maxDeepth(node.right);
if (Math.abs(right-left)<=1) {
return isBalancedTree1(node.left)&&isBalancedTree1(node.right);
}else {
return false;
}
}