题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路
这题不应该写不出来,要记住的是,不仅仅中序遍历的序列要划分为左右子树的部分,前序遍历也需要划分为左右子树!!用递归来做,因为自己在举例子时把前序遍历写错了,导致一开始难以理解,很不应该!!要理解这样做的原因,并且会举一反三。
此题注意点:
- 必须要加递归结束条件!!即判断序列是否为空,若为空,说明到了叶结点,返回NULL;
- 根据根节点划分左右子树序列,这个是个基础知识点;
- 做题时遇到很奇怪的问题,见以下代码
1 | /** |
可以看到,注释部分的功能是为了得到mid,注释下方的代码也是一样。但若是用注释部分的代码,结果却是错误的!!
后序:是自己白痴了!!唉,注释那里,if判断语句,没有加大括号。教训:就算括号体内只有一句,也要加括号,避免以后要添加语句时忘记加。