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.
想法:
求每个节点左右子树的高度差,有大于等于二的节点即返回false
具体实现:
对一个节点,求其高度(左右子树高度大者+1),同时比较左右子树是否平衡,平衡返回高度,不平衡返回 - 1,如果左右子树有高度是-1的,则返回-1
代码如下:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int GetHeight(TreeNode *root)
{
if (root == NULL) return 0;
int l = GetHeight(root->left);
int r = GetHeight(root->right);
if (l == -1 || r == -1 || abs(l - r) >= 2) return -1;
return 1 + max(l,r);
}
bool isBalanced(TreeNode *root) {
if (root == NULL) return true;
return GetHeight(root) != -1;
}
};
分析一下复杂度:
主要是GetHeight函数中的递归,每个节点访问1次,所以算法复杂度为O(n)?