实际上二叉树的中序遍历和后序遍历对应着一种栈的压入、弹出序列, 而对后序遍历序列从小到大排序就得到了中序遍历序列
我们得到中序遍历序列后, 将其作为入栈序列, 检查后序遍历序列是不是一个合法的出栈序列即可
需要以stack作为后续得中间变量
class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { if(!sequence.size()) return false; //二叉搜索树的后续遍历从小到大排序就是对应得中序遍历。 vector<int> inorder(sequence); //复制一个数组 sort(inorder.begin(), inorder.end()); return IsPopOrder(inorder,sequence); } bool IsPopOrder(vector<int> pushV,vector<int> popV){//分别对应着一种栈得压入,以及栈得探出 int n = pushV.size(); stack<int> stk;//准备生成栈用来判断。 int i=0,j=0;//分别指向两个序列当前位置得指针。 //循环,知道整个序列检查完是不是一一对应 while(i<n){//1. 要走完全部序列,n在以后要用,所以不能n--; stk.push(pushV[i]);// while(!stk.empty()&&stk.top()==popV[j]){ stk.pop(); j++; } i++;//继续准备下一个压栈 } return j == n; }
};
```