zoukankan      html  css  js  c++  java
  • 二叉搜索树的后序遍历序列

    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
    解题思路:
    所给序列是二叉搜索树的后续遍历,其实就可以确定树的形态了,因为比根节点大的都是右子树节点,比根节点小的都是左子树节点,但是满足一个重要性质:左子树的子节点的最大值需要比根节点小,右子树的子节点最小值需要比根节点大。需要判断祖父节点跟当前节点的大小关系。
    class Solution {
    public:
        bool MyVerify(vector<int>seq, int p, int pp, int l, int r){
            if(r < l){
                return true;
            }
            int i;
            for(i=l; i <= r; i++){
                if(pp > p){
                    //left
                    //max(v) < pp
                    if(seq[i] > pp){
                        return false;
                    }
                }else{
                    //right
                    //min(v) > pp
                    if(seq[i] < pp){
                        return false;
                    }
                }
            }
            for(i=l; i <= r; i++){
                if(seq[i] > p){
                    break;
                }
            }
            bool lres = true;
            if(i-2 >= l){
                lres = MyVerify(seq, seq[i-1], p, l, i-2);
            }
            bool rres = true;
            if(r-1 >= i){
                rres = MyVerify(seq, seq[r], p, i, r-1);
            }
            if(lres && rres){
                return true;
            }else{
                return false;
            }
        }
        bool VerifySquenceOfBST(vector<int> sequence) {
            int l = 0;
            int n = sequence.size();
            for(int i=0; i < n-1; i++){
                if(sequence[i] > sequence[n-1]){
                    l = i;
                    break;
                }
            }
            bool lres = true;
            if(l-1 >= 0){
                lres = MyVerify(sequence, sequence[l-1], sequence[n-1], 0, l-2);
            }
            bool rres = true;
            if(l <= n-2){
                rres = MyVerify(sequence, sequence[n-2], sequence[n-1], l, n-3);
            }
            if (lres && rres){
                return true;
            }else{
                return false;
            }
        }
    };
    

      

  • 相关阅读:
    上传高德地图-express框架
    express不是内部命令
    elasticSearch 安装
    elasticSearch 分布式安装
    mongoDB基本操作
    [是题解哦] 洛谷 P1865 A % B Problem
    [是题解哦] 洛谷 P1531 I Hate It
    [是题解哦] 洛谷 P1195 口袋的天空
    [是题解哦] 洛谷 P1536 村村通
    [是模板哦] 快速读入
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10659254.html
Copyright © 2011-2022 走看看