Fork me on GitHub

leetcode之110. 平衡二叉树

题目描述:

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

1
2
3
4
5
6
>     3
> / \
> 9 20
> / \
> 15 7
>

返回 true

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

1
2
3
4
5
6
7
8
>        1
> / \
> 2 2
> / \
> 3 3
> / \
> 4 4
>

返回 false

解题思路:

时间复杂度: $O(n^2)$,空间复杂度:$O(1)$.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 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) {
if(!root) return true;
int left = isDepth(root->left);
int right = isDepth(root->right);

if(abs(left - right) >= 2) return false;

return isBalanced(root->left) && isBalanced(root->right);

}

int isDepth(TreeNode* root)
{
if(!root) return 0;

return max(isDepth(root->left), isDepth(root->right)) + 1;

}
};