算法:重建二叉树


* @Description 重建二叉树
* @问题: 题目描述
* 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
* 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回
* @思路:
一: 采用尾递归了,根据函数左子树,右子树来进行计算;
  1:判断极端情况,前序中序长度不同,或者都为零
  2:构造根节点的二叉树,找到根节点的i值,然后再根据根节点找到中序遍历的i值
  3:构建数组 ,分别储存相应的值;
int[] preLeft int[] inLeft = int[] preRight int[] inRight
  4:对构造的数组分别进行赋值,位于根节点i左边的赋值pre加一赋值给PreLeft,根节点右边的赋值。
二: 采用类似尾递的方法,通过直接尾递归的方法,更加的简洁,但是尾递归中startPre,endPre,startIn,endIn.bu容易理解; 

第二种解法也是尾递归

 

代码:

重建二叉树代码

猜你喜欢

转载自www.cnblogs.com/liguo-wang/p/9694291.html