平衡二叉树
题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
返回 false 。
限制:
1 <= 树的结点个数 <= 10000
解题思路
构造一个获取当前子树的深度的函数 tree_height(TreeNode* root) (即二叉树的深度 ),通过比较某子树的左右子树的深度差的绝对值是否大于 1 ,若大于1则返回false,否则继续递归判断左右子树子树是否是二叉平衡树。若所有子树都平衡,则此树平衡。
代码展示
代码如下:
class Solution {
public:
//求出树的深度
int tree_height(TreeNode* root)
{
if(root==NULL) return 0;
return max(tree_height(root->left),tree_height(root->right))+1;
}
bool isBalanced(TreeNode* root) {
if(root==NULL) return true;
//左子树深度
int left_height=tree_height(root->left);
//右子树深度
int right_height=tree_height(root->right);
//如果左子树深度减去右子树深度的绝对值大于1,则不是平衡二叉树
if(abs(left_height-right_height)>1)
return false;
//递归判断左子树与右子树是否都满足平衡二叉树性质
return isBalanced(root->left)&&isBalanced(root->right);
}
};