题目
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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:
int getDepth(TreeNode * root){
if(root == NULL) return 0;
return max(getDepth(root->left), getDepth(root->right)) + 1;
}
bool judge(TreeNode* root){
if(root == NULL) return true;
int l = getDepth(root->left);
int r = getDepth(root->right);
if(abs(l - r) <= 1) return judge(root->left) && judge(root->right);
return false;
}
bool isBalanced(TreeNode* root) {
return (root == NULL || (judge(root) && judge(root->left) && judge(root->right))) ;
}
};
这个从上到下的访问过程需要遍历n个节点,每个节点会有深度,最差是O(n^2)
代码
class Solution {
public:
int getDepth(TreeNode * root){
if(root == NULL) return 0;
int l = getDepth(root->left);
int r = getDepth(root->right);
if(l == -1 || r == -1 || abs(l - r) > 1) return -1;
return max(l, r) + 1;
}
bool isBalanced(TreeNode* root) {
return (root == NULL || getDepth(root) >= 0);
}
};
这个从下往上走,所以是O(n)