题目 : Tree Traversals Again
分值 : 25
难度 : 中等题
思路 : 根据题目意思,利用他给的模拟栈操作去构建树,然后去弄出后续遍历
坑点 : 一开始我把 push的数字当作前序序列(他的确是前序),把pop的数字当作是中序序列(也的确)
       是中序,然后根据前序序列和中序序列去搞出后序序列,用的是自己的小技巧,按照前序序列插入
       比较大小准则则用该对象在中序序列的下标:因为在中序序列中,下标从小到大是 左 中 右 
       因此可以作为插入建树的比较准则 -> 去判断应该插在左子树还是右子树, 但在这题当中因为
       题目特殊性,进来的节点可能是重复的,这就让我这个搜索元素下标的子函数混淆了,他无法标记
       相同元素进入的前后性质.因此是行不通的. 
       故而思索再三,觉得只能够依据它输入的 push 队列和 pop 队列去寻找规律,发现每次push是
       在当前节点下插入一个节点,且遵循先左子树后右子树的特点.而 Pop 则是将一个节点 Pop出去
       如果这个节点被 pop过则继续往上 pop,相当于游标往上移动,换句话说,pop 操作是从一些节点
       往上追溯到下一个插入的节点,所以我在节点结构体中加入 bool pop 表征这个节点是否被pop过
       如果没有,则代表这个节点pop就行,游标停在当前节点,下次如果进来一个push就是对这个节点进
       行插入操作.如果有那么游标就要向上找到第一个没有被pop的父节点来作为下一次push的操作节点.
具体代码如下
1  | 
  |