首先是深度计算,采用递归算法,首先是递归退出条件,如果是一棵空树,深度为0,否则,二叉树的深度=左右子树较大的那个深度+1。
public int getDeep(TreeNode root) {
int res = 0;
if (root != null) {
int leftDeep = getDeep(root.getLeft());
int rightDeep = getDeep(root.getRight());
res = 1 + (leftDeep > rightDeep ? leftDeep : rightDeep);
}
return res;
}
然后是平衡二叉树的判定,仍然是采用递归,首先是递归退出条件,空树是平衡二叉树,然后是平衡二叉树的条件,左右子树深度之差不超过1,同时左右子树都是平衡二叉树。
public boolean isBalance(TreeNode root) {
if (root == null){
return true;
}
if (Math.abs(getDeep(root.getLeft()) - getDeep(root.getRight())) <= 1 && isBalance(root.getRight()) && isBalance(root.getLeft())){
return true;
}else{
return false;
}
}