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。所以用递归很简单的就能写不来,主要是对一个结点进行左递归和右递归,分别递归到叶结点,然后从0往上加代码如下,假设有n个结点,那么时间复杂度为O(n)。
Code:(LeetCode运行9ms)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode* root) {
return WhetherBalanced(root) >= 0;
}
int WhetherBalanced(TreeNode *root) {
if (!root) {
return 0;
}
int left = WhetherBalanced(root -> left);
int right = WhetherBalanced(root -> right);
if (left < 0 || right < 0 || abs(left - right) > 1) {
return -1; //条件不成立,直接返回-1,剪枝
}
return max(left, right) + 1; //返回上一层,则层数+1
}
};