《剑指offer》第三十三题(二叉搜索树的后序遍历序列)
// 面试题33:二叉搜索树的后序遍历序列
// 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
// 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 #include <iostream> // BST:Binary Search Tree,二叉搜索树
bool VerifySquenceOfBST(int sequence[], int length)
{
if (sequence == nullptr || length <= )//先看错误输入
return false; int root = sequence[length - ];//后续遍历的最后一个是根节点 // 在二叉搜索树中左子树的结点小于根结点
int i = ;//设成非循环变量
for (; i < length - ; ++i)//先加后判断,所以得到的i不是下标,是长度
{
if (sequence[i] > root)
break;
} // 在二叉搜索树中右子树的结点大于根结点
int j = i;//这里用到i,所以上述i不拿到循环里
for (; j < length - ; ++j)//只检测右子树有没有小于根节点的,有就不满足二叉搜索树的性质
{
if (sequence[j] < root)
return false;
} // 判断左子树是不是二叉搜索树
bool left = true;
if (i > )//结合上条初始化为true,这里就能限制左子树为空子树的情况
left = VerifySquenceOfBST(sequence, i); // 判断右子树是不是二叉搜索树
bool right = true;
if (i < length - )//同上
right = VerifySquenceOfBST(sequence + i, length - i - ); return (left && right);
} // ====================测试代码====================
void Test(const char* testName, int sequence[], int length, bool expected)
{
if (testName != nullptr)
printf("%s begins: ", testName); if (VerifySquenceOfBST(sequence, length) == expected)
printf("passed.\n");
else
printf("failed.\n");
} // 10
// / \
// 6 14
// /\ /\
// 4 8 12 16
void Test1()
{
int data[] = { , , , , , , };
Test("Test1", data, sizeof(data) / sizeof(int), true);
} // 5
// / \
// 4 7
// /
// 6
void Test2()
{
int data[] = { , , , };
Test("Test2", data, sizeof(data) / sizeof(int), true);
} // 5
// /
// 4
// /
// 3
// /
// 2
// /
//
void Test3()
{
int data[] = { , , , , };
Test("Test3", data, sizeof(data) / sizeof(int), true);
} // 1
// \
// 2
// \
// 3
// \
// 4
// \
//
void Test4()
{
int data[] = { , , , , };
Test("Test4", data, sizeof(data) / sizeof(int), true);
} // 树中只有1个结点
void Test5()
{
int data[] = { };
Test("Test5", data, sizeof(data) / sizeof(int), true);
} void Test6()
{
int data[] = { , , , };
Test("Test6", data, sizeof(data) / sizeof(int), false);
} void Test7()
{
int data[] = { , , , , , , };
Test("Test7", data, sizeof(data) / sizeof(int), false);
} void Test8()
{
Test("Test8", nullptr, , false);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
system("pause");
return ;
}

《剑指offer》第三十三题(二叉搜索树的后序遍历序列)的更多相关文章
- 剑指Offer面试题:22.二叉搜索树的后序遍历序列
一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...
- 剑指offer面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是返回true,否则返回false. 假设输入的数组任意两个数字都不相同 解题思路:二叉搜索树的特点是根节点的左子树的值小于等 ...
- 《剑指offer》面试题33. 二叉搜索树的后序遍历序列
问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树: 5 / \ ...
- 《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版
(判断一个元素均不相同的序列是否为一个BST的LRD) 书中方法:首先对于二叉搜索树,左子树中的所有元素小于根节点小于右子树中的所有元素,然后后序遍历序列最后一个元素是根节点,这是我们已知的条件.这道 ...
- 剑指Offer(二十三):二叉搜索树的后序遍历序列
剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 【剑指Offer】二叉搜索树的后序遍历序列 解题报告(Python)
[剑指Offer]二叉搜索树的后序遍历序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...
- 《剑指offer》二叉搜索树的后序遍历序列
本题来自<剑指offer> 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字 ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 剑指Offer:二叉搜索树的后序遍历序列【33】
剑指Offer:二叉搜索树的后序遍历序列[33] 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ...
随机推荐
- git的使用(包括创建远程仓库到上传代码到git的详细步骤以及git的一些常用命令)
A创建远程仓库到上传代码到git 1)登陆或这注册git账号 https://github.com 2)创建远程仓库 3)打开终端输入命令 cd到你的本地项目根目录下,执行如下git命令 git in ...
- virtualBox虚拟机联网
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
- 【Rewrite重定向】Nginx使用rewrite重新定向
使用nginx做重新定向. nginx参考网址:http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*| ...
- 下载YouTube视频的方法
这个网站就可以: http://www.clipconverter.cc/ 更多的网站及介绍参考知乎:http://www.zhihu.com/question/19964181
- keras load model 遇到 自定义函数 Lambda(lambda x: softmax(x, axis=1), NameError: global name 'softmax' is not defined
问题 在定义模型的时候,自定义了一个函数 模型保存之后,load 模型的时候报错: 解决 load 模型的时候需要指定custom object 参考: https://faroit.github.i ...
- HDU 4770
这题说的是一在一个N*M的房间内,然后有些房间不能被灯光照亮,有一个灯可以转动方向,其他的灯只能在固定一个方向上,因为数据比较小,所以比较水,直接暴力的进行枚举就好了,但是还是 wa了很久,原因没认真 ...
- 谷歌浏览器 URL无法访问
使用谷歌浏览器老是会崩溃,或者访问的时候发现“URL无法访问”等失败的问题,连淘宝都没法访问,这个让人很恼火, 最后在扩展应用那里搜到个URL的redirect,问题解决了,~~发现没有再出现类似问题 ...
- Shell脚本实现每个工作日定时执行指定程序
我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...
- python webdriver操作浏览器句柄
断言 assert self.driver.title.find(u"搜狗搜索引擎")>=0, "assert error" 浏览器后退,前进,前进前要先 ...
- Linux基础命令---ar
ar ar指令可以创建.修改库,也可以从库中提取单个模块.库是一个单独的文件,里面包含了按照特定结构组织起来的其他文件,我们称作member.归档文件通常是一个二进制文件,我们一般将归档文件当作库来使 ...