二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 };
原文地址:https://www.cnblogs.com/hellosnow/p/12082633.html