• 剑指offer-二叉搜索树的后序遍历序列


    描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)
     
    求解思路:
    1. 通过递归依次判断子序列是否满足二叉搜索树构建条件。

    代码:

     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> sequence) {
     4         // 不好找后序遍历有什么特点,那就根据这个序列判断是否满足二叉搜索树构建条件
     6         if(sequence.empty()){
     7             return false;
     8         }
     9         return correctST(sequence);
    10     }
    11     
    12     bool correctST(vector<int> seq){
    13         if(seq.empty()){
    14             return true;
    15         }
    16         int len=seq.size();
    17         int rootVal=seq[len-1];   // 找到当前序列的根节点
    18         vector<int> leftTree,rightTree;
    19         int i=0;
    20         while(i<len-1){  // 左子树序列
    21             if(seq[i]<rootVal){ // 不用考虑等于,因为都不重复
    22                 leftTree.push_back(seq[i]);
    23             }else{
    24                 break;
    25             }
    26             ++i;
    27         }
    28         while(i<len-1){  // 右子树序列,如果序列中发现小于根节点的值,那直接返回fasle
    29             if(seq[i]>rootVal){
    30                 rightTree.push_back(seq[i]);
    31             }else{
    32                 return false;
    33             }
    34             ++i;
    35         }
    36         return correctST(leftTree) && correctST(rightTree);
    37     }
    38 };
    心之所愿,永不相忘
  • 相关阅读:
    Scala for the Impatients---(1)Basics
    2.2 Markov Chain
    2.1 Monte Carlo Integration
    1.2 Sampling From Non-standard Distribution
    1.1 Built-in Distributions In Matlab
    Design Pattern -- Builder
    Java Dynamic proxy
    The Difference Between Keypoints and Descriptors
    gcc -l option vs. -L option: The difference
    Stationarity and Independence of Data
  • 原文地址:https://www.cnblogs.com/zgll/p/15072216.html
Copyright © 2020-2023  润新知