剑指offer|二叉搜索树的后序遍历序列
来源:互联网 发布:su素材知乎 编辑:程序博客网 时间:2024/06/05 09:15
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
后续遍历的特点是遍历序列为下面这几种形式:
1. 根
2. 左右根
3. 左根
4. 右根
其中左表示左子树,右表示右子树,根表示根节点。由于是二叉搜索树,所以左子树的节点全都小于根节点,右子树全都大于根节点。而根节点肯定在最后。
我们可以通过递归的方式来处理。先寻找左子树,再寻找右子树。如果左子树和右子树都满足上述条件,则递归的处理左子树和右子树。否则返回否。递归出口为上面第一种情况,就是只有一个节点。同时要注意第三种情况和第四种情况。
class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { int length=sequence.size(); if(length == 0) return false; return VerifyCore(sequence,0,length-1); } bool VerifyCore(vector<int> sequence,int begin,int end) { if(begin == end) return true; int i=begin; while(i< end && sequence[i]<sequence[end] ) ++i; if(i==end) { return VerifyCore(sequence,begin,end-1); } else { int j=i+1; while(j<end && sequence[j]>sequence[end]) ++j; if(j<end) return false; else { if(i>begin) return (VerifyCore(sequence,begin,i-1) && VerifyCore(sequence,i,end-1)); else return VerifyCore(sequence,begin,end-1); } } }};
0 0
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 大数据时代,如何像看“今日头条”那样去看电视?
- Spring入门第4天--Spring事物管理
- 降低程序耦合性的方法
- linux上java环境搭建
- spring笔记:第二章(通过xml装配bean)
- 剑指offer|二叉搜索树的后序遍历序列
- 数据结构实验之查找六:顺序查找(sdut_3378)
- Android之 drawTextOnpath
- 使用eclipse+maven报jspmaven The superclass "javax.servlet.http.HttpServlet" was not found
- 数据结构上机实验之顺序查找(sdut_2040)
- demo
- 复制复杂链表
- swift:闭包的解析
- 高内聚低耦合