实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
本题类似于求树的深度,注意定义是每个节点
/**
* 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 balance = true;
int TreeLength(TreeNode* root);
bool isBalanced(TreeNode* root) {
TreeLength(root);
return balance;
}
};
int Solution::TreeLength(TreeNode* root) {
// 终止条件
if (root == NULL) {
return 0;
}
int l = TreeLength(root->left) + 1;
int r = TreeLength(root->right) + 1;
// is balance for each node
if (abs(l - r) > 1) {
balance = false;
}
return max(l, r);
}