进入来看我这篇文章的小伙伴应该大都是遇见了leetcode中的105. 从前序与中序遍历序列构造二叉树或是106. 从中序与后序遍历序列构造二叉树,其实这两个题是明显的同意思路,如果一个题目没有思路,可以看看别人的解答,然后把另外一个当作练习,这也是极好的。
原理讲解
这两个题目的思路其实是和之前遍历二叉树的思路是一样的:分而治之。
在这样一个题目中,第一个重要的思路是前序(后序)在vector中的第一个值(最后一个值)是对应的一个父节点。
以下给出leetcode中的例子来帮助说明:
不得不提的是这个题目有这样一个假设:你可以假设树中没有重复的元素。所以以下我会用数字代指节点。
- 在刚拿到这个题目时,我们可以根据前序vector得出判断:3是一个父节点(如果无法理解这一步的话,我们需要复习一下先序遍历)。
- 根据1的结论,我们再由中序队列得出3这个节点的左边是[9],右边是[15,20,7](如果无法理解这一步的话,我们需要复习一下中序遍历)。
- 由2的结论,我们能够知道3这个节点左边的节点有1个,右边有3个。由此得到在前序的情况下:3这个节点左边是[9],右边是[