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

题目描述

  输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
  思路:序列的最后一个节点是根节点,找分界点,分为左右子树,递归。
 1 class Solution {
 2 public:
 3 int getMid(vector<int> &sequence, int begin, int end)
 4 {
 5     int idx;
 6     for(idx=begin; idx<=end-1; ++idx)
 7     {
 8         if(sequence[idx]>sequence[end])break;
 9     }
10     for(int i=idx; i<=end-1; ++i)
11     {
12         if(sequence[i]<sequence[end])return -1;
13     }
14     return idx;
15 }
16 bool isBST(vector<int> &sequence, int begin, int end)
17 {
18     if(begin>=end)return true;
19     int mid=getMid(sequence, begin, end);
20     if(mid==-1)return false;
21     return isBST(sequence, begin, mid-1) && isBST(sequence, mid, end-1);
22 }
23 bool VerifySquenceOfBST(vector<int> sequence)
24 {
25     if(sequence.size()==0)return false;
26     return isBST(sequence, 0, sequence.size()-1);
27 }
28 };

 

 

posted @ 2017-12-25 10:26  jeysin  阅读(134)  评论(0编辑  收藏  举报