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

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

      分析:在后序遍历中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两个部分,第一个部分是左子树节点的值,他们都比根节点的值小;第二个部分是右子树节点的值,他们都比根节点的值大。因此从头遍历整个数组,当遇到一个大于根节点的数时,将前面的都划为左子树,继续遍历,如果后面有一个小于根节点的值,则不是后序遍历数组;如果后面的所有数都小于根节点的值,则继续递归遍历下去,代码如下(是根据在牛客网上给的函数原型写的):

     1 bool VerifySquenceOfBST(vector<int> sequence) {
     2     if(sequence.size()<=0)
     3         return false;
     4     return Judge(sequence,0,sequence.size()-1);
     5 }
     6 
     7 bool Judge(vector<int> sequence,int l,int r){
     8     int i=l,j;
     9     for(;i<r;i++){
    10         if(sequence[i]>sequence[r])
    11             break;
    12     }
    13     for(j=i;j<r;j++){
    14         if(sequence[j]<sequence[r])
    15             return false;
    16     }
    17     bool leftJudge = true;
    18     bool rightJudge = true;
    19     if(i>0)
    20         leftJudge = Judge(sequence,0,i-2);
    21     if(i<r)
    22         rightJudge = Judge(sequence,i-1,r-1);
    23     return leftJudge&&rightJudge;
    24 }
  • 相关阅读:
    软工假期预习作业1
    2号团队-团队任务4:每日立会(汇总)
    2号团队-团队任务4:每日立会(2018-11-26)
    2号团队-团队任务4:每日立会(2018-11-27)
    第二小组首次会议记录
    第二次作业
    自我介绍+课后作业1:准备
    Linux安装redis
    Redis面试题
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5787886.html
Copyright © 2011-2022 走看看