• 全部
  • 问答

[关注]有关已知二叉树的前序和中序,求后序问题的独特算法.

LeeMaRS 2002-06-15 12:12:02
这几天偶来这里转了转,发现这里有不少的朋友问到这样一个问题:
已知二叉树的前序和中序,求后序.

然后偶也看了不少朋友的解答,基本上都是先还原出二叉树,然后再遍历求出后序,程序都挺麻烦的...

呵呵,在C++探路者,偶也曾经提出了这个问题,想看看大家的解法,可惜都是同样的做法..

呵呵,其实偶知道一个好方法的~~~~:D

偶现在就公布答案~~~~~~! 不过先声明,这并不是我的原创... (不要打我呀!)

这是一个比较少见的方法.在保证前序和中序的正确性和无二义性下,比标准解法要简单得多.有兴趣的朋友可以前去C++探路者看看: http://cpp.aosee.com/bbs/. 算法与数据结构版. 这个算法还可以推广到已经后序和中序 求前序的问题上.

同样希望有不同见解的朋友能继续就这个问题进行讨论.偶不是高手的说,如果有错误,还请指出~可以在这里跟帖,也可以到论坛去回复.当然,我建议去论坛回复,因为这样子我比较能顾及~

最后,希望大家以后也能多到C++探路者坐客,关心这个初学者的论坛:) 谢谢! 同时散分:)
...全文
795 1 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
LeeMaRS 2002-06-16
xiaoluoli(C/C++思考) 很感谢你的支持
to langhaixin(问题少年) : 当时建树的步骤还是我帖的呢:) 至于 Betta(小新)的程序 应该是属于第二级 不过偶还是有点看不懂 呵呵
回复
langhaixin 2002-06-16
这个问题 我以前在数据算法版问过
http://www.csdn.net/expert/topic/692/692030.xml?temp=.7136042
回复
xiaoluoli 2002-06-16
一个算法吗?
不一定就是只有一种模式,你的答案也只是其中一种,别人可能有更好的算法,不过你能想到就很不错了.
拉来大家讨论一下很好.
常关注:)!!!!
回复
xiaoluoli 2002-06-16
"直接从前序和后序确定他的后序遍历",这有疑问吗?我说的不就是"跳过了建树的步骤,而直接得到二叉树的后序遍历"吗?
回复
LeeMaRS 2002-06-16
偶最后再up一次,如果再没人关注,呵呵,偶也没办法了.就结帖了.
回复
flyaramy 2002-06-15
我这就去看看,留个名,好拣分,谢谢先!
回复
atlantis13579 2002-06-15
gz
回复
earthharp 2002-06-15
哈哈
回复
garfield_82 2002-06-15
up
回复
qxp 2002-06-15
呵呵,不过而而,没事大家还是常去数据结构盒算法版看看吧
回复
LeeMaRS 2002-06-15
偶转帖过来吧:

好了.公布答案吧.

在严格保证先序 中序序列 的正确性和无二义性的情况下(也就是我说的,不用数据折磨你们的程序),完全没有必要构造出整个二叉树再遍历,可以直接从前序 中序得到后序,也是一个递归算法.

我以前提到这个问题分三级:

第三级呢 就是根据先序 中序 把整个二叉树还原出来 然后再进行后序遍历.Figlab和ydaye的程序应该是在这一级的.

第二级呢 就是能想到 根据先序和中序 应该可以直接推出后序的 因为构造二叉树的过程 和 后序遍历二叉树的过程 几乎一样
此时写出来的程序 是有两个参数 一个先序序列 一个中序序列

第一级最厉害了 就是发现递归使用前序的顺序 正好就是从左到右依次的 所以使用一全局变量p当作指针 减少了一个参数的传递
第一级利用递归调用时的特点 进行了优化 很难想得到的 呵呵

好了,明白没有呢?
回复
LeeMaRS 2002-06-15
楼上的帖子好像打错了些字,呵呵.像"直接从前序和后序确定他的后序遍历",让人有点晕晕:) 楼上的,能不能再描述一次?

偶帖的算法比普通算法的优势,就是跳过了建树的步骤.
回复
xiaoluoli 2002-06-15
哥们你前面说的我看了看:我觉得这个问题提得很好,有助于我们对算法的进一步掌握,升华.
我觉得一棵二叉树,给出了前序和后序就能确定一棵二叉树,而一棵二叉树又能得到他的后序遍历.从中我们能不能走一条捷径,直接从前序和后序确定他的后序遍历.
你一想我们是怎样确定二叉树的,我们怎样确定二叉树的根接点的,只要我们能一一确定一个二叉树的每个接点的话我们不就可以不通过先确定这棵二叉树,而直接确定这棵二叉树的后序遍历了吗.
我是赶才想了一下,不知道我的观点对大家有不有用.希望大家多多指教.
谢谢!!!
回复
xiaoluoli 2002-06-15
哥们你前面说的我看了看:我觉得这个问题提得很好,有助于我们对算法的进一步掌握,升华.
我觉得一棵二叉树,给出了前序和后序就能确定一棵二叉树,而一棵二叉树又能得到他的后序遍历.从中我们能不能走一条捷径,直接从前序和后序确定他的后序遍历.
你一想我们是怎样确定二叉树的,我们怎样确定二叉树的根接点的,只要我们能一一确定一个二叉树的每个接点的话我们不就可以不通过先确定这棵二叉树,而直接确定这棵二叉树的后序遍历了吗.
我是赶才想了一下,不知道有不有用
回复
llin_9461 2002-06-15
谢谢你的贴子,又多长了点知识。
回复
Jawan_lee 2002-06-15
sd
回复
LeeMaRS 2002-06-15
希望大家能发表看法呀.
回复
songyangaaron 2002-06-15
看看
回复
aibren 2002-06-15
gz
回复
LeeMaRS 2002-06-15
...晕倒.
从昨天到现在这么久了,才几个人关注的...
看来虽然公布了好解法,结果最后知道的人还是不多呀...
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-06-15 12:12
社区公告
暂无公告