判断平衡二叉树
题目(力扣110题):
解题思路
1,首先理解平衡二叉树的定义,使用Map存储每个节点的高度
2,求得当前节点的左右子树高度,若Map中左右子树高度已经求过,直接取得,若没有,通过递归计算高度并存入Map中
3,左右子树高度差>1,则不是平衡二叉树
代码实现
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
// 使用Map存储每个出现节点的高度
// 求当前的左右子树高度
Map<TreeNode,Integer> map = new HashMap<>();
int left = 0;
int right = 0;
if(map.containsKey(root.left)){
//root.left高度已经计算过,直接取得
left = map.get(root.left);;
}else{
//通过递归计算高度并存入map中
left = Height(root.left);
map.put(root.left,left);
}
if(map.containsKey(root.right)){
//root.right高度已经计算过,直接取得
right = map.get(root.right);;
}else{
//通过递归计算高度并存入map中
right = Height(root.right);
map.put(root.right,right);
}
int ret = Math.abs(left - right);
if(ret > 1){
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
public int Height(TreeNode root) {
if(root == null){
return 0;
}
return 1 + Math.max(Height(root.left),Height(root.right));
}