题目链接:Balanced Binary Tree
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。
考虑递归思路,处理当前节点是,通过Maximum Depth of Binary Tree计算出左右子树的深度,然后判断是否相差小于1。同时还需要递归判断左右子树是否也是高度平衡的二叉树。
可以注意到,在处理某节点的时候,需要遍历2次其子树(求深度和判断是否高度平衡),时间复杂度较高。接下来可以采用一个技巧,就是在求深度的时候同时判断是否平衡,然后对于不平衡的直接返回-1作为标记,这样降低了时间复杂度。
时间复杂度:O(n)
空间复杂度:O(1)
1 class Solution
2 {
3 public:
4 bool isBalanced(TreeNode *root)
5 {
6 return maxDepth(root) != -1;
7 }
8 private:
9 int maxDepth(TreeNode *p)
10 {
11 if(p == NULL)
12 return 0;
13
14 int lh = maxDepth(p -> left);
15 int lr = maxDepth(p -> right);
16
17 if(lh == -1 || lr == -1 || abs(lh - lr) > 1)
18 return -1;
19
20 return max(lh, lr) + 1;
21 }
22 };