剑指offer:二叉搜索树的后续遍历序列
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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:二叉搜索树的后续遍历序列的更多相关文章
- 剑指offer 二叉搜索树与双向链表
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...
- [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)
①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...
- 剑指offer之 二叉搜索树的后续遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution { ...
- 剑指offer 二叉搜索树和双向链表
剑指offer 牛客网 二叉搜索树和双向链表 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 18:58:36 2019 ...
- 剑指Offer 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 后续遍历数组的尾部为根节点,前面的部分 ...
- 剑指Offer——二叉搜索树的第k个结点
题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只 ...
- 剑指Offer——二叉搜索树与双向链表
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两 ...
- 剑指Offer——二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...
- 用js刷剑指offer(二叉搜索树与双向链表)
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...
随机推荐
- 1、爬虫简介与request模块
一 爬虫简介 概述 近年来,随着网络应用的逐渐扩展和深入,如何高效的获取网上数据成为了无数公司和个人的追求,在大数据时代,谁掌握了更多的数据,谁就可以获得更高的利益,而网络爬虫是其中最为常用的一种从网 ...
- 命令行翻译 推荐一个linux系统中可用的终端小程序
程序的github地址:https://github.com/fanbrightup/fanyi 使用起来非常简单,同时支持中英文互译甚至是整句. 步骤一:首先你需要安装node,参见我的node安装 ...
- composer(管理依赖关系的工具) 及配置信息
Composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 配置文件 ...
- 【转】IE内嵌google chrome frame解决浏览器兼容问题
参考文献: http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的heade ...
- 写出js内存泄漏的问题?
回答一: (1)IE7/8 DOM对象或者Active对象循环引用导致内存泄漏 a.多个对象循环引用 b.循环的DOM泄漏 (2)基础的DOM泄漏 当原有的DOM被移除时,子节点引用没有被移除则无法回 ...
- trufflesuite/truffle-hdwallet-provider
https://github.com/trufflesuite/truffle-hdwallet-provider/blob/master/index.js 实现代码 truffle-hdwallet ...
- OpenCV——查找、绘制轮廓
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- leetcode-876 Middle of the Linked List
Given a non-empty, singly linked list with head node head, return a middle node of linked list. If t ...
- JAVA框架 Spring 和Mybatis整合(动态代理)
一.使用传统方式的dao的书写方式,不建议.目前采用的是动态代理的方式交给mybatis进行处理. 首先回顾下动态代理要求: 1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法 ...
- SQL Prompt 智能提示插件
1.安装及破解参照地址:http://jingyan.baidu.com/article/a3a3f811da2b3a8da3eb8a4b.html 2.安装包下载: 1)下载 2)http://do ...