《剑指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.假设输入的数组的任意两个数字都互不相同. ...
随机推荐
- c#中WMI 中的日期和时间转为本地时间
取得的值:CreationDate:20170122084915 .713600+480 转: var objQuery = new ObjectQuery("select * from ...
- JSON—fastJSON
FastJSON的简介和作用? 1:基于java实现的JSON解析器和生成器 2:将java对象序列化成JSON字符串 3:将JSON字符串反序列化得到java对象 (在服务端生成java是很麻烦的事 ...
- MySQL从删库到跑路(六)——SQL插入、更新、删除操作
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.插入数据 1.为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录的值. IN ...
- Linux命令: 在线练习网址
1.https://www.tutorialspoint.com/unix_terminal_online.php 2.从 这里 https://www.tutorialspoint.com/inde ...
- php CI框架实现验证码功能和增强验证码安全性实战教程
php CI框架实现验证码功能和增强验证码安全性实战教程 CodeIgniter简称CI是最流行的一个php MVC框架之一,本人讲从实际项目使用中写系列实战经验,有别与其他的理论讲解文章,会附上实战 ...
- postman接口测试——笔记
接口测试理论: 一.接口 1.程序内部接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块,发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它 ...
- selenium自动化定位方法
用selenium操作浏览器进行自动化操作其实就是通过元素属性执行相关操作.所以,我们要知道怎样去查找元素,定位元素. 常见的定位属性有: #查找元素的id find_elements_by_id(i ...
- Python入门之实现简单的购物车功能
Talk is cheap,Let's do this! product_list = [ ['Iphone7 Plus', 6500], ['Iphone8 ', 8200], ['MacBook ...
- 03: vuejs 事件、模板、过滤器
目录:Vue其他篇 01: vue.js安装 02: vue.js常用指令 03: vuejs 事件.模板.过滤器 目录: 1.1 事件 1.2 模板 1.3 自定义过滤器 1.4 过度 1.5 支付 ...
- exp9《网络对抗》web安全基础实践201453331魏澍琛
201453331魏澍琛web安全基础实践 一.实验过程 1.webgoat开启 2.Injection Flaws练习 Command Injection 原网页中没有注入的地方,那就用burpsu ...