LeetCode 面试题 04.04. 检查平衡性
题目描述
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
解题思路
- dfs遍历,返回节点及其子节点最深的深度
- 如果子节点之间的深度差大于1就可以输出false了
- 否则一直是true
AC代码
class Solution {
public:
bool ans = true;
int dfs(TreeNode* t, int n) {
if (!ans)return 0;//如果已经是false了, 就没必要继续遍历了
if (!t)return n;//节点为空, 直接返回
int a = dfs(t->left, n + 1);//遍历左子节点
int b = dfs(t->right, n + 1);//遍历右子节点
if (abs(a - b) > 1)ans = false;//如果差值大于1, ans置为false
else return max(a, b);//否则的话返回深度的最大值
return 0;
}
bool isBalanced(TreeNode* root) {
dfs(root, 0);
return ans;
}
};