Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340598
  • 博文数量: 88
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-21 14:50
文章分类

全部博文(88)

文章存档

2010年(88)

我的朋友

分类: C/C++

2010-09-07 19:50:30

解决方案:
根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。
首先编写一个计算二叉树深度的函数,利用递归实现。

template
static int Depth(BSTreeNode* pbs)
{
	if (pbs==NULL)
		return 0;
	else
	{
		int ld = Depth(pbs->left);
		int rd = Depth(pbs->right);
		return 1 + (ld >rd ? ld : rd);
	}
}

下面是利用递归判断左右子树的深度是否相差1来判断是否是平衡二叉树的函数:

template
static bool isBalance(BSTreeNode* pbs)
{
	if (pbs==NULL) 
		return true;
	int dis = Depth(pbs->left) - Depth(pbs->right);
	if (dis>1 || dis<-1 )
		return false;
	else
		return isBalance(pbs->left) && isBalance(pbs->right);
}
阅读(881) | 评论(1) | 转发(0) |
0

上一篇:小明一家过桥问题

下一篇:字符串反转

给主人留下些什么吧!~~

chinaunix网友2010-09-12 15:08:52

重复计算太多了,直接用一个函数实现就可以: template static bool Depth(BSTreeNode* pbs, int &deep) { if (pbs==NULL) { deep = 0; return true; } else { int ld,rd; if(Depth(pbs->left,ld) && Depth(pbs->right,rd)) { if(abs(ld-rd) <= 1) { deep = 1 + (ld >rd ? ld : rd); return true; } } return false; } }