您的位置:首页 > 其它

第九题(判断整数序列是不是二元查找树的后序遍历结果)

2014-07-10 11:56 260 查看
第9 题

判断整数序列是不是二元查找树的后序遍历结果

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。

如果是返回true,否则返回false。

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

8

/ \

6 10

/ \ / \

5 7 9 11

因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

思路:二元查找树后序遍历结果根节点位于数组末尾位置,左子树节点元素全部小于根节点元素,右子树节点元素全部大于根节点元素,因此可以从数组起始位置遍历找到第一个大于根节点的值,该值所在位置就是左子树和右子树的分界点,若从这个位置开始到数组末尾位置之前所有的元素都大于根节点,则该根节点的左子树<根节点<右子树。

接下来需要判断数组的前半部分和后半部分是不是分别是左子树和右子树后续遍历的结果,可以通过重复上面的过程来实现判断,因此方便的做法是采用递归实现。

代码:

bool verifyBSTPostOrder(int sequence[], int length)
	{
		if (length <= 1)
			return true;
		int i, j;
		for (i = 0; i <length - 1 && sequence[i] < sequence[length - 1]; i++);
		j = i;
		for (; j<length - 1; j++)
		{
			if (sequence[j] < sequence[length - 1])
				return false;
			else
				return verifyBSTPostOrder(sequence, i) && verifyBSTPostOrder(sequence + i, length - i - 1);	//注意是length-i-1 不包括最后一个root节点
		}
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐