博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉搜索树的后序遍历序列
阅读量:5162 次
发布时间:2019-06-13

本文共 1014 字,大约阅读时间需要 3 分钟。

题目

  输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同

二叉搜索树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

  1. 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值
  2. 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值
  3. 左、右子树也分别为二叉排序树

        特点:左子树结点的值都小于根节点的值,右子树结点的值都大于根节点的值

思路

  序列最后一个值是根结点,根据根结点将序列剩余部分划分为两个部分,左子树部分比根节点的值都小,右子树部分比根节点的值都大。

拓展

  如果需要处理一棵二叉树的遍历序列,则可以先找到二叉树的根节点,再根据根节点把整棵树的遍历序列拆分成左子树对应的序列和右子树对应的序列,接下来递归处理这两棵子树。

#include 
#include
#include
using namespace std;class Solution{ public: bool is_bst(vector
&v,int beg,int end);};bool Solution::is_bst(vector
&v,int beg,int end) { if(v.empty()||beg>end) return false; int root=v[end]; //划分二叉搜索树的左子树,找到该序列中第一个大于根节点的结点 int i=beg; for(;i
root)// break; //判断二叉搜索树的右子树有没有小于根节点的结点 int j=i; for(;j
beg) left=is_bst(v,beg,i-1); bool right=true; if(i
v{ 5,7,6,9,11,10,8}; Solution s; cout<
<
<

 

转载于:https://www.cnblogs.com/tianzeng/p/10193185.html

你可能感兴趣的文章
35 个 Java 代码性能优化总结
查看>>
怎样才能自学好Java?
查看>>
Distinct Values(2018hdu多校第一场)
查看>>
phpStudy集成环境下 安装composer
查看>>
curl 异步捉取数据类
查看>>
Niblack二值化方法的实现
查看>>
php英语单词,php常用英语单词,快速学习php编程英语(4)
查看>>
5月29,48h,Geekathon,创业极客的梦想起点
查看>>
bzoj4415: [Shoi2013]发牌
查看>>
JAVA基础——使用配置文件
查看>>
Unicode转字符串
查看>>
Keil C51汉字显示的bug问题
查看>>
网页浮动的解析
查看>>
webgis技术在智慧城市综合治理(9+X)网格化社会管理平台(综治平台)的应用研究...
查看>>
Ansible--项目实战
查看>>
一步一步制作yaffs/yaffs2根文件系统(六)---完善命令行提示符
查看>>
不同间距BGA的过孔及规则设置
查看>>
堆和栈
查看>>
创建.删除,更新,获取数据库命令
查看>>
java Web jsp嵌入代码的三种方式
查看>>