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

    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
     
    提交链接:点击
     
     
    思路:
      我们回忆下BST的定义。BST要么是一颗空树,要么是满足一下性质的二叉树,它的左子树的值都比根节点值小,右子树的值都比根节点的值大,然后左右子树分别为二叉查找树。
           于是产生了解题方法。给定一个序列,那么序列的最后一个元素是根节点x,我们顺序遍历除了最后一个元素的其他节点,找到第一个比根节点大的值的位置,按照BST的概念,那么从这个位置以后的节点值都应该比根节点的值大(除了根节点)。于是将序列分成了两段,一段比x小,一段比x大;接下来递归判断这两段序列是否为合法序列即可!完美的递归定义。
     
     
    代码:
     
    class Solution {
    public:
        bool VerifySquenceOfBST(vector<int> sequence) {
            /*二叉搜索树又叫二叉查找树BST*/
            int size=sequence.size();
            if(size==0) return false;  //如果为空数组,那么返回false
            return judge(sequence, 0, size-1);
        }
    
        bool judge(vector<int> sequence, int start, int end){
            if(start>=end) return true; //start>end为空树,满足;start=end为叶子节点,满足;
            int i,flag;
            for(i=start;i<end;i++){
                if(sequence[i]>sequence[end]) {flag=i;break;}//找到第一个比根节点大的值,那么如果是BST,那么它后面的值都将比根节点值大
            }
            for(;i!=end;i++){
                if(sequence[i]<sequence[end]) return false;  //如果存在比根节点小的值,那么就肯定不是合法序列
            }
            return judge(sequence,start,flag-1) && judge(sequence,flag,end-1);
        }
    };

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    应用Dubbo框架打造仿猫眼项目 理解微服务核心思想
    慕课网--docker走进第一个javaweb应用
    金融行业微服务架构解析-转载炼数成金架构模块金融行业微服务架构解析
    StringEscapeUtils防止xss攻击详解
    尚硅谷 dubbo学习视频
    【面试篇】寒冬求职之你必须要懂的Web安全
    echo "" > 和 echo "" >> 的区别
    python函数、模块、包
    python学习笔记(7)--循环语句
    python学习笔记(6)--条件分支语句
  • 原文地址:https://www.cnblogs.com/logo-88/p/9762581.html
Copyright © 2011-2022 走看看