码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树的后序遍历序列

时间:2016-06-24 10:57:04      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

题目:

输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果,如果是返回true,否则返回false

分析:由于二叉搜索树的特性,左子树一定小于根节点,右子树一定大于根节点,所以在一颗二叉搜索树中不会出现两个相同的节点


bool IsBST(int arr[],int len)
{
	assert(arr !=NULL);
	if(len < 0)
		return false;
	//首先由于二叉树的特性,所以根节点是最后一个节点
	int root=arr[len-1];
	int i=0;
	while(i <len-1)
	{
		//找到第一个比根节点大的节点,从这一分为二
		//小于i的是根节点左子树,大于i的是右子树
		if(arr[i] >root)
			break;
		++i;
	}
	int j=i+1;
	while(j <len-1)
	{
		//由于二叉搜索树的性质,所以如果找到右子树中有比root小的树
		//那就不是二叉搜索树,返回false
		if(arr[j] <root)
			return false;
	}
	//否则就递归的去从左右子树中继续找
	bool leftchild=true;
	//从i下标隔开,小于i的是根节点左子树
	//大于i下标的是右子树
	if(i >0)
		leftchild=IsBST(arr,i);
	//递归右子树
	bool rightchild=true;
	if(i < len-1)
		rightchild=IsBST(arr,len-i-1);

	//最后返回左右子树相 && 的结果
	return (leftchild && rightchild);
}

二叉搜索树的后序遍历序列

标签:

原文地址:http://blog.csdn.net/zhou753099943/article/details/51750270

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!