题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
递归
【运行时间:15ms 占用内存:8404k】
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if (root==null) return true;
int left_height = height(root.left);
int right_height = height(root.right);
if(Math.abs(left_height - right_height) > 1)
return false;
else
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
private int height(TreeNode root){
if(root == null)
return 0;
int left_height = height(root.left);
int right_height = height(root.right);
return 1 + (left_height > right_height ? left_height : right_height);
}
}
递归2
参考牛客网网友解答
public class Solution {
//后续遍历时,遍历到一个节点,其左右子树已经遍历 依次自底向上判断,每个节点只需要遍历一次
private boolean isBalanced=true;
public boolean IsBalanced_Solution(TreeNode root) {
getDepth(root);
return isBalanced;
}
public int getDepth(TreeNode root){
if(root==null)
return 0;
int left=getDepth(root.left);
int right=getDepth(root.right);
if(Math.abs(left-right)>1){
isBalanced=false;
}
return right>left ?right+1:left+1;
}
}