题目 : Pre- and Post-order Traversals
分值 : 30
难度 : 难题
思路 : 前序+后序 求解整棵树是不是唯一的,并给出中序遍历
       前序 :  按照 中左右顺序打印
       后序 :  按照 左右中顺序打印
       解题步骤: 
       1)把后序直接倒序 就变成了 中右左 顺序 我称之为镜像前序
       2)维护一个队列,这个队列 按照 层序建树
       3)镜像前序 和 前序 第一个节点自然是 整棵树的 Root 先把他装入队列顶部
       4)然后依次访问队列顶部元素 在前序队列中找到 该元素的下一个元素 l
          这里分成两种情况
          一)如果 l 已经在队列中,那么舍弃
          二)如果 l 并未出现在队列中,那么添加到队列中,并且作为当前元素的直接左子树
       5)在 镜像前序队列中找到 该元素的下一个元素 r
          这里也分成两种情况
          一)如果 r 已经在队列中,那么舍弃
          二)如果 r 并未出现在队列中,那么添加到队列中,并且作为当前元素的直接右子树
       6)如果 l == r 则说明不能分清楚 该节点到底是在当前节点 左边还是右边 ,因此答案不唯一
       7)依次遍历直至 队列为空 我们就建立起了一颗完整的二叉树 
       8)然后按照 中序遍历顺序打印一下 
坑点 : 只有一个节点情况了解一下,当出现上述 l==r 情况时 判断一下是不是N==1 因为N==1时
       也会出现 l==r 的情况,但这时是可以确认一棵树的. 
具体代码如下
1  | 
  |