基于visual Studio2013解决面试题之0208二叉搜索树后序遍历序列




题目



解决代码及点评

/*
	给出一个数组,判断该数组是否为二叉搜索树的后序遍历
	后序遍历是先遍历左子树,再遍历右子树,最后访问根节点

	所以,后序遍历的特点是,最后一个元素是根节点
	在数组剩下的部分里,某连续的部分P1小于根节点,而某连续的部分P2全部大于根节点

	对P1和P2来说,分别是两个子树的后序遍历,因此使用递归即可
*/
#include <iostream>
using namespace std;

/* 判断是否后序遍历序列 */
static bool VerifyArrayOfBST(int* a, int len)
{
	int root = a[len - 1]; // 最后一个节点是根节点
	int i, j;
	bool result;

	// 对于只有小于两个节点的树来说,我们认为其是后序遍历序列
	if (len <= 2) return true;

	// 循环找到第一个大于根节点的下标
	for (i = 0; i < len-1; ++i)
	{
		if (a[i] > root)
			break;
	}

	// 在这个大于根节点的下标后面的所有数据,应该都大于root
	// 否则它不是后序遍历序列
	for (j = i; j < len - 1; ++j)
	{
		if (a[j] < root)
			return false;
	}

	// 递归的检测左子树
	result = VerifyArrayOfBST(a, i);

	//  如果左子树成功,则检测右子树,并返回
	if (result)
		return VerifyArrayOfBST(a + i, len - i - 1);

	// 左子树都不成功,则返回false
	return false;

}

// 测试的main函数
int main()
{
	int a[]={1,6,4,3,5};
	int a1[]={7,6,4,3,5};
	
	if (VerifyArrayOfBST(a,5)==true)
	{
		cout<<"a是搜索树"<<endl;
	}
	else{
		cout<<"a不是搜索树"<<endl;
	}
	if (VerifyArrayOfBST(a1,5)==true)
	{
		cout<<"a1是搜索树"<<endl;
	}
	else{
		cout<<"a1不是搜索树"<<endl;
	}
	system("pause");
	return 0;
}



代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









你可能感兴趣的:(基于visual Studio2013解决面试题之0208二叉搜索树后序遍历序列)