Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
按照平衡二叉树理论,是左右子树都是平衡二叉树,同时左右子树的高度差不能超过1,那么直接去比较左右子树最深和最浅子树深度是否超过1就可以啦,那么按照这种想法,我去找根节点中最深和最浅距离,判断一下就可以证明是不是平衡树啦,代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int max(TreeNode root)
{
if(root==null)return 0;
return 1+Math.max(max(root.left),max(root.right));
}
public int min(TreeNode root)
{
if(root==null)return 0;
return 1+Math.min(min(root.left),min(root.right));
}
public boolean isBalanced(TreeNode root) {
return max(root)-min(root)<2;
}
}
注意:上面代码之所以错误的最大原因就是因为没有搞清楚树的高度的概念
这种做法却无法通过的最主要原因是树的高度是树中节点的最大层数,也就是最大、最小比较肯定是错的哦!
结果是
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int max(TreeNode root)
{
if(root==null)return 0;
int left=max(root.left);
if(left==-1)return -1;
int right=max(root.right);
if(right==-1)return -1;
if(Math.abs(left-right)>1)return -1;
return 1+Math.max(left,right);
}
public boolean isBalanced(TreeNode root) {
return max(root)!=-1;
}
}
才能保证成立