题目如下:给出一个二叉树的前序遍历,输出这个树所有可能的中序遍历(有时也会可能会是后序遍历)
对应于一棵二叉树的前序遍历,我们知道,前序遍历的第一个节点,一定是根节点。所以,我们可以很容易的找出根节点,剩下的部分呢,是左子树和右子树节点在一起了,本题的难点就在于,你如何去将前序遍历的结果中除去根节点部分的其余节点分为左右子树的节点。暴力一些就是慢慢拆。以前序遍历{1,2,3}为例。
因为节点较少,分析起来也很直观,所以我们可以分为以上几种情况,对于case1和case3,我们可以看出,case1中的2,3又可以存在两种不同的情况,case3中的左子树同理。可以分为以下5中情况。
这时候可以直接上代码了吧。