判断是否为二叉平衡树c++

1.想法

平衡树的要求: 任何一个节点左右子树的高度差不超过1
首先递归地判断根节点左右子树是否平衡,之后分别进入左右子树,再以当前节点为根,重复上述判断。

2.实现

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
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(nullptr), right(nullptr){}
};
class Solution {
public:
bool isBalanced(TreeNode* root) {
if (!root)
return true;
int ldep = depth(root->left);
int rdep = depth(root->right);
if (abs(ldep - rdep) > 1)
return false;
return isBalanced(root->left) && isBalanced(root->right);
}
int depth(TreeNode* root) {
if (!root)
return 0;
int ldep = depth(root->left);
int rdep = depth(root->right);
return ldep >= rdep ? ldep + 1: rdep + 1;
}
};