这题只需要在求二叉树深度的基础上扩展一下即可,下面为求二叉树深度的代码。
public HashMap<TreeNode, Integer> map = new HashMap<>();
public int getDepth(TreeNode root) {
if (root == null)
return 0;
int depthLeft = getDepth(root.left) + 1;
int depthRight = getDepth(root.right) + 1;
map.put(root, Math.max(depthLeft, depthRight));
return Math.max(depthLeft, depthRight);
}
只需在求完左右子树的深度后进行判断即可,判断左右子树的深度之差是否大于1。并且通过一个布尔变量hefa
标记该二叉树是否为平衡二叉树,如果不平衡,立即停止往下递归。
public class Solution {
public HashMap<TreeNode, Integer> map = new HashMap<>();
public boolean hefa = true;
public int getDepth(TreeNode root) {
if (hefa) {
if (root == null)
return 0;
int depthLeft = getDepth(root.left) + 1;
int depthRight = getDepth(root.right) + 1;
if (Math.abs(depthLeft - depthRight) > 1)
hefa = false;
map.put(root, Math.max(depthLeft, depthRight));
return Math.max(depthLeft, depthRight);
}
return -99;
}
public boolean IsBalanced_Solution(TreeNode root) {
getDepth(root);
return hefa;
}
}