题目
解决代码及点评
/* 给出一个数组,判断该数组是否为二叉搜索树的后序遍历 后序遍历是先遍历左子树,再遍历右子树,最后访问根节点 所以,后序遍历的特点是,最后一个元素是根节点 在数组剩下的部分里,某连续的部分P1小于根节点,而某连续的部分P2全部大于根节点 对P1和P2来说,分别是两个子树的后序遍历,因此使用递归即可*/#includeusing 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是搜索树"<
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6704519
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果