判断是否为平衡二叉树

判断是否为平衡二叉树_第1张图片

要判断是否是平衡二叉树,就要了解平衡二叉树的定义:

它是一颗空树或它的左右两个子树的高度差的绝对值不差过1。

平衡二叉树的左右两颗子树都是一颗平衡二叉树。

如何判断一棵树是不是平衡二叉树:就是要判断一棵树的左右子树的高度差的绝对值是否大于1,如果大于1,那么它不是平衡树,如果小于等于1,它就是平衡树。


(我刚开始认为只要将树的左右子树的高度求出来,然后判断它们的高度差的绝对值,但是这样想就错了,如果是如下图这颗的树,虽然树根的左右两个子树的高度差的绝对值小于等于1,但是它并不是平衡树,因为平衡树是要求这个树和它的每一个子树都满足左右两颗子树的高度差的绝对值小于等于1)下图不是平衡树。

判断是否为平衡二叉树_第2张图片


 思想:

判断当前树是否是平衡树(左右两颗子树的高度差的绝对值满足条件),且采用递归判断当前树的左右两颗子树是否为平衡树,直到直到当前树为空。

完整代码块:

#include 
#include 
#include 
#include 

typedef char BTDataType;
typedef struct BinaryTreeNode
{
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
	BTDataType data;
}BTNode;


//二叉树的最大深度
int maxDepth(BTNode* root)
{
	if (root == 0)
	{
		return 0;
	}
	int LeftDepth = maxDepth(root->left);
	int RightDepth = maxDepth(root->right);
	return LeftDepth > RightDepth ? LeftDepth + 1 : RightDepth + 1;

}


//判断是否为平衡二叉树
bool isBalanced(BTNode* root)
{
	if (root == NULL)
	{
		//空树是平衡树
		return true;
	}
	int LeftDepth = maxDepth(root->left);
	int RightDepth = maxDepth(root->right);
	return abs(LeftDepth - RightDepth) <= 1
		&& isBalanced(root->left)
		&& isBalanced(root->right);
}

递归函数展开图:

判断是否为平衡二叉树_第3张图片

你可能感兴趣的:(算法)