二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 };