解法一:前序(中序、后序)遍历二叉树,计算每个结点左右子树高度,查看每个结点是否满足平衡二叉树性质。 复杂度太高!O(nlgn)
解法二:在求解树高度的过程中,加入一个标志位flag,只需要遍历一次即可。复杂度O(n)
int getDepth(TreeNode* root, bool& flag){
if(root){
int leftDepth = getDepth(root->left, flag);
int rightDepth = getDepth(root->right, flag);
if(fabs(leftDepth - rightDepth) > 1){
flag = false;
}
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
return 0;
}
bool IsBalanced_Solution(TreeNode* root) {
bool flag = true;
getDepth(root, flag);
if(flag){
return true;
}
else{
return false;
}
}