判断二叉树是否是平衡树
这道题一开始我有点迷,有点搞不清平衡树的意思,虽然查了百度百科,但还是觉得不是十分的透彻,这让我耽误了许多时间。
后来在看了一些博客后,我突然醒悟,什么是平衡二叉树?
就是头结点的两个子树是平衡二叉树,且两个子树高度不超过 1。这句话就是一个递归。
定义平衡二叉树已经确定可以用递归来处理,那么高度怎么求呢?
平衡二叉树的高度等于什么呢?
等于其最高的一侧子树的高度加上头结点那一层。
Problem solved.
int depth(TreeNode *root){
if (root == nullptr){
return 0;
}
auto leftSubTreeDepth = depth(root->left);
auto rightSubTreeDepth = depth(root->right);
return max(leftSubTreeDepth, rightSubTreeDepth) + 1;
}
bool isBalanced(TreeNode* root) {
if(root == nullptr){
return true;
}
return (isBalanced(root->left) && isBalanced(root->right)
&& (abs(depth(root->left) - depth(root->right)) < 2));
}