题解 | #平衡二叉树#
平衡二叉树
http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
算法步骤
1. 判断当前节点是否满足平衡的要求(左右子树高度差不超过1)
2. 满足1并不能保证其左右子树是平衡二叉树,因此需要递归判断 左子树是否平衡,右子树是否平衡
3. 若当前节点及其左右子树都满足平衡的要求,则整个树是平衡二叉树,否则不是平衡二叉树
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return dfs(root);
}
//深度优先搜索 判断node树是否我平衡二叉树
private boolean dfs(TreeNode node)
{
if(node==null)
{
return true;
}
//判断node是否平衡
boolean IsBalanced=false;
if(Math.abs(height(node.left)-height(node.right))<=1)
IsBalanced = true;
else
IsBalanced = false;
//递归判断左子树是否平衡
boolean l= dfs(node.left);
//递归判断右子树是否平衡
boolean r= dfs(node.right);
return IsBalanced && l && r;
}
//计算树的高度
private int height(TreeNode node)
{
if(node==null)
return 0;
if(node.left==null && node.right==null)
return 1;
int l = height(node.left);
int r = height(node.right);
return Math.max(l,r)+1;
}
}