【题目】

输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

8
       /  \
      6    10
    / \    / \
   5   7   9  11

因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

【思路】

在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。

【代码】

C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 

bool VerifySequenceOfBST(int a[], int n)
{
    if (NULL == a || n < 0)
        return false;
    //if (n==1)
    //return true;

int root = a[n - 1];
    int i = 0;
    for (; i < n - 1; i++)
    {
        if (a[i] > root)
            break;
    }

int j = i;
    for (; j < n - 1; j++)
    {
        if (a[j] < root)
            return false;
    }

bool left = true;
    if (i > 0)
        left = VerifySequenceOfBST(a, i);

bool right = true;
    if (i < n - 1)
        right = VerifySequenceOfBST(a + i, n - 1 - i);

return (left && right);
}

【参考】

http://zhedahht.blog.163.com/blog/static/25411174200725319627/

转载于:https://www.cnblogs.com/hellogiser/p/3738437.html

6.二元查找树的后序遍历结果[PostOrderOfBST]相关推荐

  1. 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8   ...

  2. 判断整数序列是不是二元查找树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  3. 二元查找树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回 true ,否则返回 false . 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: ...

  4. 9判断整数序列是不是二元查找树的后序遍历结果

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4252095.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

  5. 判断某个数列是不是二元查找树的后序遍历。

    给定一个数组序列,判断这个数列是不是二叉查找树的后序遍历.后序遍历是先左节点,再右节点,最后根节点.二叉查找树定义为节点的左子树都小于该节点,该节点的右子树都大于该节点.如果是后序遍历,那么根是最后一 ...

  6. leetCode 1110 删点成林(树,后序遍历)

    题目链接:点击查看 题目描述: 给定一个整数二叉树和一些整数,求删掉这些整数对应的节点后,剩余的子树. 输入输出: 输入:root = [1,2,3,4,5,6,7], to_delete = [3, ...

  7. XDOJ 363 输出快速排序递归算法隐含递归树的后序遍历序列 AC

    像我这样的菜鸡也没有什么能输出的,好像我写题解也不算输出. 最近期末了,写数据结构实验的时候,这个题写了挺久的,搞出来记录一下. 输出快速排序递归算法隐含递归树的后序遍历序列 描述: 快速排序递归算法 ...

  8. 后序遍历c语言程序,C++对树进行后序遍历的代码

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #include #include struct Node{ Node *lchild;/ ...

  9. 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表

    一.从上往下打印二叉树: 1.题目: 上往下打印出二叉树的每个节点,同层节点从左至右打印. 2.解题思路: 用arraylist模拟一个队列来存储相应的TreeNode. 3.代码实现: public ...

最新文章

  1. why do you need that a awesome linkedin profile
  2. boost::lexical_cast模块将创建一个to_long_double方法,将 Boost.Variant 的值转换为long double
  3. java并发编程之美-阅读记录7
  4. LeetCode——BFS
  5. 2020牛客国庆集训派对day4 What Goes Up Must Come Down
  6. [学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]
  7. 克罗谈投资策略04_感觉与现实
  8. Python-file -note
  9. (1)深度学习_梯度下降与优化
  10. 【图像配准】基于matlab GUI光流场模型医学图像配准【含Matlab源码 747期】
  11. 尚硅谷大数据Hadoop(1)技术之Hadoop(入门)
  12. 通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法
  13. 汇编语言指令功能总结
  14. 中国计量大学matlab,计量经济学及matlab.pdf
  15. 5不触发系统键盘_防盗报警系统基础知识汇总
  16. python——spilt和strip用法
  17. android+双卡imei,以编程方式在Android中为双SIM卡检索IMEI号码
  18. matlab symadd,信号调理器设计—大二暑期信号分析实习报告精选多篇
  19. 【转自知乎】软件实施工程师-简历范文,【工作经历+项目经验+专业技能+自我评价】怎么写
  20. 奇怪的日常 [ 2 ]:Python下合成萝莉/御姐音

热门文章

  1. 手写简版spring --4--注入属性和依赖对象
  2. 日常生活小技巧 -- 文件对比工具 Beyond Compare
  3. UNIX再学习 -- TCP/UDP 客户机/服务器
  4. Linux动态频率调节系统CPUFreq
  5. c#.net课程设计:ZCMU通讯录(待更新)
  6. hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))
  7. 互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK
  8. 谈谈AOP应用层切面设计
  9. 【问链财经-区块链基础知识系列】 第四十六课 区块链如何作用于医药行业
  10. 区块链基础知识系列 第二课 区块链共识算法