推断二叉树是不是平衡二叉树

本文介绍了一种使用后序遍历的方法来判断一棵二叉树是否为平衡二叉树。通过递归地获取每个节点的左右子树深度,并判断深度差是否小于等于1,最终得出整棵树是否平衡。
题目:输入一棵二叉树的根结点,推断该树是不是平衡二叉树。

某二叉树中随意结点的左右子树的深度相差不超过1。那么它就是一棵二叉树。
        我们非常easy就能想到一个代码简洁却性能不佳的思路:在遍历树的每一个结点的时候,调用函数TreeDpth得到它的左右子树的深度。

假设每一个结点的左右子树的深度相差都不超过1。依照定义它就是一棵平衡的二又树。

        较好的思路是:用后序遍历的方式遍历整棵二叉树。

在遍历某结点的左右子结点之后,我们能够依据它的左右子结点的深度推断它是不是平衡的,并得到当前结点的深度。

当最后遍历到树的根结点的时候,也就推断了整棵一几叉树是不是平衡一叉树。这样的方案每一个结点仅仅需遍历一次。

struct BinaryTreeNode{
	int m_nValue;
	BinaryTreeNode *m_pLeft;
	BinaryTreeNode *m_pRight;
};
bool IsBalanced(BinaryTreeNode *pRoot, int *depth)
{
	if (pRoot==NULL)
	{
		*depth=0;
		return true;
	}
	//中间变量,记录左右子树的深度
	int left,right;
	if (IsBalanced(pRoot->m_pLeft,&left)&&IsBalanced(pRoot->m_pRight,&right))
	{
		//深度差
		int Dif=left-right;
		if (Dif<=1&&Dif>=-1)
		{
			*depth=1+(left>right?left:right);
			return true;
		}
	}
	return false;
}

//推断是否是平衡二叉树
bool IsBalanced(BinaryTreeNode *pRoot)
{
	int depth=0;
	return IsBalanced(pRoot,&depth);
}


转载于:https://www.cnblogs.com/bhlsheji/p/5319058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值