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 };
  • 相关阅读:
    API接口服务端
    phpredis扩展
    PHP之-json转数组,支持多层嵌套json
    瀑布流
    ERROR 1130: Host xxx is not allowed to connect to this MySQL server
    让IE支持CSS3 Media Query实现响应式Web设计
    Sublime Text快捷键:
    最简单的linux内存清理方法
    16: vue + crypto-js + python前后端加密解密
    16: mint-ui移动端
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12082633.html
Copyright © 2011-2022 走看看