题解 | #二叉搜索树的后序遍历序列#

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

http://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

  • 实际上二叉树的中序遍历和后序遍历对应着一种栈的压入、弹出序列, 而对后序遍历序列从小到大排序就得到了中序遍历序列

  • 我们得到中序遍历序列后, 将其作为入栈序列, 检查后序遍历序列是不是一个合法的出栈序列即可

  • 需要以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;
      }
    

};
```

算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
ResourceUt...:你是我见过最美的牛客女孩
晒一下我的毕业照
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务