每天一道算法_9_由后序遍历和中序遍历求前序遍历

假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,求前序遍历。 整体思路是这样的,由后序遍历找到每个节点,然后由中序遍历判断左右子树,将整个二叉树还原后写出前序遍历。后序遍历的顺序知道,最后一个A是二叉树的根节点,然后把中序遍历从A分成两段,A左边的是左子树,A右边的是右子树,结果如下 然后看右边的子树,从后序遍

大家好,又见面了,我是全栈君。

假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,求前序遍历。

 

整体思路是这样的,由后序遍历找到每个节点,然后由中序遍历判断左右子树,将整个二叉树还原后写出前序遍历。

后序遍历的顺序知道,最后一个A是二叉树的根节点,

然后把中序遍历从A分成两段,A左边的是左子树,A右边的是右子树,

结果如下

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

然后看右边的子树,

从后序遍历知道,左子树的后序遍历为IFC,中序遍历为CIF

问题回到刚开始,重复之前的过程,由后序遍历知道根节点为C,把中序遍历从C分成两段,

左边是左子树,右边是右子树

也就是右边只有一个右子树,

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

然后再次重复以上过程,现在IF的后序遍历是IF,中序遍历是IF,说明

节点时F,I是F的左子树

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

这样,这棵二叉树的右子树就完全复原了,左子树的方法完全相同,就是一个递归过程,流程图如下

 

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

 

NEXT:

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

 

 

最后得到的完整二叉树如下:

每天一道算法_9_由后序遍历和中序遍历求前序遍历

 

然后写出前序遍历就可以了,是ABDEGHJCFI

用算法可以实现的,暂时留在这。

 

 

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121363.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 操作系统中并发和并行的区别在于_线程是并行还是并发

    操作系统中并发和并行的区别在于_线程是并行还是并发一、教材解释:·并行是指两个或者多个事件在同一时刻发生,而并发是指两个或者多个事件在同一时间间隔发生·并行是在不同实体上的多个事件,并发是在同一实体上的多个事件二、c语言站长公众号解释:1、并发早期计算机的CPU都是单核的,一个CPU在同一时间只能执行一个进程或线程,当系统中有多个进程或线程等待执行时,CPU只能执行完一个再执行下一个。计算机在运行过程中,有很多指令会设计i/o操作,而i/o操作又是相当耗时间的,速度远远低于CPU,这导致CPU经常处于空闲状态,只能等待i/o操作完成

    2025年6月9日
    0
  • android 三目运算符 运用错误

    android 三目运算符 运用错误

    2021年9月14日
    119
  • python 斑马式切图片 拼接 酷毙了

    python 斑马式切图片 拼接 酷毙了

    2021年11月10日
    50
  • Python中numpy数组的拼接、合并

    Python中numpy数组的拼接、合并Python中numpy数组的合并有很多方法,如np.append()np.concatenate()np.stack()np.hstack()np.vstack()np.dstack()其中最泛用的是第一个和第二个。第一个可读性好,比较灵活,但是占内存大。第二个则没有内存占用大的问题。假设有两个数组a,b分别为:>>>aarray([0,…

    2022年6月15日
    33
  • css里的clear_css display属性的值及用法

    css里的clear_css display属性的值及用法clear:none|left|right|both.对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。清除浮动方法,1,给父级元素添加class=“clearflex”2,在css中给父级添加属性:overflow:hidden;(我比较喜欢这个)3,伪元素清除法,4,建立空的div,命名为clear,在css中添加clear:both;…

    2022年9月11日
    1
  • c语言调用graphviz_graphviz使用

    c语言调用graphviz_graphviz使用graphviz 是贝尔实验室几个计算机牛人设计的一个开源的图表 计算机科学中数据结构中的图 可视化项目 主要用 C 语言实现 主要实现了一些图布局算法 通过这些算法 可以将图中的节点在画布上比较均匀的分布 缩短节点之间的边长 并且尽量的减少边的交叉 graphviz 提供命令式的绘图方式 它提供一个 dot 语言用来编写绘图脚本 然后对这个脚本进行解析 分析出其中的定点 边以及子图 然后根据属性进行绘制

    2025年6月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号