题目描述:

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

解题思路:

根据二叉搜索的性质,后序遍历是先搜索左子树,再右子数,最后是根结点。对应到序列中就是,序列的最后一位为根结点,从头开始遍历序列中一段连续子序列小于根结点,为左子树,后一段连续子序列大于根结点,为右子树。

举个例子,序列为(2,4,3,6,7,5),则5为根结点,对应(2,4,3)都小于5,为左子树,(6,7)大于5,为右子树。再对每个子树递归。

注意,对于初试为空的序列,返回的结果应该是false。因此在递归过程中遇到空的子序列,需要多一个判断。或是重写一个递归函数,递归函数中的空序列返回true,而原函数中的空序列单独判断。

代码:

class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==)
return false;
if(sequence.size()==)
return true;
vector<int> left;
vector<int> right;
int root = sequence[sequence.size()-];
int i;
for(i = ; i<(sequence.size()-); i++)
{
if(sequence[i]<root)
left.push_back(sequence[i]);
else
break;
}
for(i = i+; i<(sequence.size()-); i++)
{
if(sequence[i]>root)
right.push_back(sequence[i]);
else
return false;
}
if(left.size()== && right.size()==)
return true;
if(left.size()== && VerifySquenceOfBST(right))
return true;
if(right.size()== && VerifySquenceOfBST(left))
return true;
if(VerifySquenceOfBST(left) && VerifySquenceOfBST(right))
return true;
else
return false;
}
};

剑指offer:二叉搜索树的后续遍历序列的更多相关文章

  1. 剑指offer 二叉搜索树与双向链表

    html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...

  2. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

  3. 剑指offer之 二叉搜索树的后续遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution { ...

  4. 剑指offer 二叉搜索树和双向链表

    剑指offer 牛客网 二叉搜索树和双向链表 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 18:58:36 2019 ...

  5. 剑指Offer 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分 ...

  6. 剑指Offer——二叉搜索树的第k个结点

    题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只 ...

  7. 剑指Offer——二叉搜索树与双向链表

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两 ...

  8. 剑指Offer——二叉搜索树的后序遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...

  9. 用js刷剑指offer(二叉搜索树与双向链表)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...

随机推荐

  1. 【jquery】 在异步加载的元素上绑定事件

    最近因为工作关系又重新回归到了jquery的怀抱,发现很多jquery的一些细节处理的部分都忘记了.这里记录一下最近在做项目时频繁遇到的一个问题:给异步加载的元素添加事件绑定. 问题发生的前提是项目前 ...

  2. python第三十九课——面向对象(二)之设计类

    1.设计类class 车: #属性 颜色 = red 品牌 = "BMW" 车牌 = "沪A88888" #函数 行驶(): 停止(): 2.实例化车对象 ca ...

  3. 选择当天一周一月导出excel表格

    <a href="javascript:;" class="fr btn btn-primary radius mt-6 mr-10" onclick=& ...

  4. Odoo作为App后端时如何调试App

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307340.html  一:Odoo可以作为app后台+后台管理系统使用 Odoo作为一个可供二次开发的框架, ...

  5. Git——新手入门与上传项目到远程仓库GitHub(转)

    Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先 ...

  6. Linux 4.18内核系列已过时

    的Linux内核维护者Greg Kroah-Hartman宣布Linux 4.18内核系列的生命周期结束,敦促用户尽快将他们的发行版升级到更新的内核. Linux 4.18内核由Linux Liny ...

  7. leetcode63—Unique Path II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  8. Linux中Shell

    Linux中Shell Shell是什么 ​ Shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,可以用Shell来启动.挂起.停止.编写一些程序. S ...

  9. HDU 2159 FATE(有选择物品总个数限制的完全背包,经典!!)

    FATE Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  10. Scala--特质

    一.为什么没有多重继承 c++允许多重继承 Java不允许多重继承,类只能继承一个超类,可以实现任意数量的接口. 如何继承这两个抽象基类? Scala提供“特质”而非接口:特质可以同时抽象方法和具体方 ...