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

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

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;
      }
    

};
```

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务