二叉搜索树的后序遍历序列
来源:互联网 发布:淘宝买iphonex靠谱吗 编辑:程序博客网 时间:2024/05/17 06:39
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
//后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。
//则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都比root小,右侧部分都比root大,
//如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行
class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { int size = sequence.size(); //空树也是二叉搜索树,但是系统规定了空树不为二叉搜索树…… if(size == 0) return false; return islastorder(sequence, 0, size-1); } bool islastorder(vector<int> a, int l, int r){ //遍历完数组的一部分没报错,返回true if(l >= r) return true; int i = l;//判断根节点以前的数 //i从后往前走,找到第一个比根节点小的数 //while循环结束后,i中保存的是左子树的最后一个数 while(i < r && a[i]<a[r]) i++; //依次判断i以前的所有数,是否都小于根节点 //若有大于根节点的数,返回false for(int j = i; j <= r-1; j++){ if(a[j] < a[r]) return false; } //对于左子树和右子树分别递归调用函数,进行判断 return islastorder(a, l, i-1)&& islastorder(a, i, r-1); }};
思路2:
如果左侧部分有比根节点大的数,则不是后序序列
class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { int size = sequence.size(); //空树也是二叉搜索树,但是系统规定了空树不为二叉搜索树…… if(size == 0) return false; return islastorder(sequence, 0, size-1); } bool islastorder(vector<int> a, int l, int r){ //遍历完数组的一部分没报错,返回true if(l >= r) return true; int i = r-1;//判断根节点以前的数 //i从后往前走,找到第一个比根节点小的数 //while循环结束后,i中保存的是左子树的最后一个数 while(i >= l && a[i]>a[r]) i--; //依次判断i以前的所有数,是否都小于根节点 //若有大于根节点的数,返回false for(int j = l; j <= i; j++){ if(a[j] > a[r]) return false; } //对于左子树和右子树分别递归调用函数,进行判断 return islastorder(a, l, i)&& islastorder(a, i+1, r-1); }};
阅读全文
0 0
- 二叉树------二叉搜索树的后序遍历序列
- 【树5】二叉搜索树的后序遍历序列
- 题目10:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 1367:二叉搜索树的后序遍历序列 @jobdu
- 二叉搜索树的后序遍历序列
- Q24:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 关于sting临时地址返回问题
- CentOS7使用firewalld打开关闭防火墙与端口
- HDU 6103 Kirinriki(尺取)
- 堆排序建堆的时间复杂度
- hash个人总结c++
- 二叉搜索树的后序遍历序列
- 各种数据库查询前几条数据
- could not find 'xxx.program' specified for main method
- PHP的json_encode中文被转码的问题
- VS使用C语言调用控制台执行Matlab编译出的exe文件提示找不到matlab
- 学习Javascript闭包(Closure)
- 遍历标签同时添加点击事件
- JSP——JSP介绍以及运行原理
- 教务管理系统8_11