剑指offer4 重建二叉树

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
  分析 
前序遍历序列前面的第一个数字就是根1。
之后通过根1把中序遍历划分成两个子序列。左子序列{4,7,2}和右子序列{5,3,8,6}。
对左子序列进行上述的分析。
前序遍历序列前面的第二个数字就是根2.
之后通过根2把左子序列划分成两个子序列。左子序列{4,7}和右子序列{}。
再对左子序列进行上述的分析。
前序遍历序列前面的第三个数字就是根4.
之后通过根4把左子序列划分成两个子序列。左子序列{}和右子序列{7}。
现在开始对右子序列{7}进行分析。
前序遍历序列前面的第四个数字就是根7.
之后通过对根7把右子序划分成两个子序列。左子序列{}和右子序列{}。
现在开始对右子序列{}进行分析。
不存在值,跳过去。
现在开始对右子序列{5,3,8,6}进行划分。
前序遍历序列前面的第五个数字就是根3.
之后通过对根3把右子序列{5,3,8,6}划分成两个子序列。左子序列{5}和{8,6}。
现在开始对左子序列{5}进行分析。
前序遍历序列前面的第六个数字就是根5.
之后通过对根5把左子序列{5}划分成两个子序列。左子序列{}和右子序列{}。
现在开始对右子序列{8,6}进行分析。
前序遍历序列前面的第七个数字就是根6
之后通过根6把右子序列{8,6}划分成两个子序列。左子序列{8}和右子序列{}。
 
从上述过程中,我们可以得知,重建二叉树使用的方法是前序遍历方法。
 先遍历根节点,再遍历左子序列,后再遍历右子序列。
重建二叉树应该是最经典的前序遍历方法了,需要记下来。
1.第一重循环使用的是前序遍历序列{1,2,4,7,3,5,6,8},对其进行操作。
   2.第二重循环是对中序遍历序列{4,7,2,1,5,3,8,6}进行操作。(查找到根节点所在,将其分为左子序列和右子序列)
  2.1.再对左子序列重复以上操作,对右子序列重复以上操作。
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-09-26 18:08  幽默de程序员  阅读(74)  评论(0编辑  收藏  举报