题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:首先求出深度,然后进行深度比较,求深度需要求二叉树深度函数,然后再调用深度函数,最后比较深度差。
class Solution {
public:
//需要一个求二叉树深度的函数进行辅助,因为平衡二叉树的定义
//1.是它是一 棵空树或
//2.它的左右两个子树的高度差的绝对值不超过1,
//3.并且左右两个子树都是一棵平衡二叉树。
int tree_depth(TreeNode* t)
{
if (t == NULL)
return 0;
int left = tree_depth(t->left);
int right = tree_depth(t->right);
return (left > right ? left + 1: right + 1); //左子树深度加一或者右子树深度加一,因为还有根节点
}
bool IsBalanced_Solution(TreeNode* pRoot)
{
if (pRoot == NULL)
return true; //1.它是一 棵空树
int left_depth = tree_depth(pRoot->left);
int right_depth = tree_depth(pRoot->right);
int diff = left_depth - right_depth;
if (diff > 1 || diff < -1)
return false;
else //2.3.第二第三次情况,其实我试了一次啊,else直接返回true结果也对,不过感觉不是很严谨,
//所以else返回判断左子树和右子树是否也为平衡树(第三种情况),直接返回true只是第二种情况,
//也不太很确定自己的想法是否正确,欢迎指正
return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
}
};