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

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

    首先需要知道,二叉搜索树的特点是,左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。后序遍历是按照左——右——根的顺序进行遍历的。所以这道题的大体思路是,根据左子树小于根节点的特点,找到左子树的分界点,然后从右子树开始,看是不是所有的值都大于根节点,如果出现小于根节点的情况,说明不符合要求。然后对左子树 (l, k-1) 和右子树 (k, r-1) 进行递归。当 l >= r 时,说明判断完成,可以返回true。

    还有要注意特判一下数组是否为空,如果为空,直接返回false。

    c++代码如下:

     1 class Solution {
     2 public:
     3     vector<int> seq;
     4     bool VerifySquenceOfBST(vector<int> sequence) {
     5         seq = sequence;
     6         if(seq.empty()) return false;
     7         return dfs(0, seq.size() - 1);
     8     }
     9     
    10     bool dfs(int l, int r){
    11         if(l >= r) return true;
    12         int k = l;
    13         while(k < r && seq[k] < seq[r]) k++;
    14         for(int i = k; i < r; i++){
    15             if(seq[i] < seq[r]) return false;
    16         }
    17         return dfs(l, k-1) && dfs(k, r-1);
    18     }
    19 };
  • 相关阅读:
    HDU 4868 Information Extraction(2014 多校联合第一场 H)
    Transformations 方块转换
    catalan 数——卡特兰数(转)
    算法分析与设计——矩阵连乘问题
    算法设计与分析——多边形游戏(DP)
    蓝桥杯算法训练 最大最小公倍数
    codeforces 518B. Tanya and Postcard
    并查集
    高精度的进制转换
    线段树(转)
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12082633.html
Copyright © 2011-2022 走看看