Given a binary tree, determine if it is
height-balanced
.
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: true
Example 2:
Input: root = [1,2,2,3,3,null,null,4,4] Output: false
Example 3:
Input: root = [] Output: true
Constraints:
- The number of nodes in the tree is in the range
[0, 5000]
. -104 <= Node.val <= 104
递归:后序(求高度)
class Solution {
public:
int getHeight(TreeNode*root){
if(root==NULL)return 0;
int leftHeight=getHeight(root->left);
if(leftHeight==-1)return -1;
int rightHeight=getHeight(root->right);
if(rightHeight==-1)return -1;
return abs(leftHeight-rightHeight)>1?-1:1+max(leftHeight,rightHeight);
}
bool isBalanced(TreeNode* root) {
return getHeight(root)==-1?false:true;
}
};
思路:
后序遍历求高度,前序遍历求深度
1,getHeight函数:用-1来表示该子树已经不是平衡二叉树了。否则返回左右子树的最大高度
2,主函数:getHeight返回-1就false,否则true
3,其实迭代也可以,但是代码很冗长,而且效率不高