题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
1.不剪枝
有点像先序遍历
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null)return true;
int flag = Math.abs(getDep(root.left) - getDep(root.right));
return flag <= 1 && IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
public int getDep(TreeNode root){
if(root == null) return 0;
return Math.max(getDep(root.left) ,getDep(root.right)) + 1;
}
}
2.后续遍历
public class Solution {
boolean flag = true;
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null)return true;
getDep(root);
return flag;
}
public int getDep(TreeNode root){
if(root == null) return 0;
int n1 = getDep(root.left);
int n2 = getDep(root.right);
if(Math.abs(n1 - n2) > 1) flag = false;
return Math.max(n1, n2) + 1;
}
}
3.利用-1标记,及时剪枝
public class Solution {
boolean flag = true;
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null)return true;
int ans = getDep(root);
return ans != -1;
}
public int getDep(TreeNode root){
if(root == null) return 0;
int n1 = getDep(root.left);
if(n1 == -1) return -1;
int n2 = getDep(root.right);
if(n2 == -1) return -1;
if(Math.abs(n1 - n2) > 1) return -1;
return Math.max(n1, n2) + 1;
}
}