题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路: 平衡二叉树是左右子树的深度差不超过一, 递归求得左右子树的深度, 即可判断是不是平衡二叉树。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL)
return true;
int leftDepth = IsBalanced_SolutionCore(pRoot->left);
int rightDepth = IsBalanced_SolutionCore(pRoot->right);
if (leftDepth > rightDepth + 1 || leftDepth < rightDepth - 1)
return false;
return true;
}
//递归求取某一节点的高度
int IsBalanced_SolutionCore(TreeNode* pRoot)
{
//如果节点为空,则高度为0
if (pRoot == NULL)
return 0;
int leftDepth = IsBalanced_SolutionCore(pRoot->left);
int rightDepth = IsBalanced_SolutionCore(pRoot->right);
//否则返回左右节点高度的最大值为当前节点的高度
return max(leftDepth + 1, rightDepth + 1);
}
};