这些天,有些作笔试题的朋友问我,关于数据结构二叉树知道前序遍历,中序遍历,求后续遍历的算法,虽然这种也挺简单的,可是在刚大学的时候,刚学数据结构那会儿,我也是不会的……只会在纸上乱涂乱画,唉,当年也是一个渣渣,如今趁有点空,在这总结一下,后边有朋友问到能够直接过来看个人文章就好啦!
咱们先来回顾一下二叉树的遍历:算法
前序遍历的“前”指的是根节点最前访问,后边中序遍历的“中”指的是根节点中间访问,后序遍历的“后”指的是根节点最后访问。所以,前中后针对的对象是根节点。数据结构
前序遍历spa
根节点对象
左子树it
右子树class
中序遍历求职
左子树二叉树
根节点遍历
右子树im
后续遍历
左子树
右子树
根节点
如今了解了前中后遍历的一些特色,那么咱们来看一个例子吧
已知:
前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
求后序遍历
首先,要先画出这棵二叉树,怎么画呢?根据上面说的咱们一步一步来……
先看前序遍历,前序遍历第一个必定是根节点,那么咱们能够知道,这棵树的根节点是G,接着,咱们看中序遍历中,根节点必定是在中间访问的,那么既然知道了G是根节点,则在中序遍历中找到G的位置,G的左边必定就是这棵树的左子树,G的右边就是这棵树的右子树了。
咱们根据第一步的分析,大体应该知道左子树节点有:ADEF,右子树的节点有:HMZ。同时,这个也分别是左子树和右子树的中序遍历的序列。
在前序遍历遍历完根节点后,接着执行前序遍历左子树,注意,是前序遍历,什么意思?就是把左子树当成一棵独立的树,执行前序遍历,一样先访问左子树的根,由此能够获得,左子树的根是D,第2步咱们已经知道左子树是ADEF了,那么在这一步获得左子树的根是D,请看第4步。
从第2步获得的中序遍历的节点序列中,找到D,发现D左边只有一个A,说明D的左子树只有一个叶子节点,D的右边呢?咱们能够获得D的右子树有EF,再看前序遍历的序列,发现F在前,也就是说,F是先前序遍历访问的,则获得E是F的左子树,只有一个叶子节点。
到这里,咱们能够获得这棵树的根节点和左子树的结构了。以下图:
接着看右子树,在第2步的右子树中序遍历序列中,右子树是HMZ三个节点,那么先看前序遍历的序列,先出现的是M,那么M就是右子树的根节点,恰好,HZ在M的左右,分别是它的左子树和右子树,所以,右子树的结构就出来了:
到这里,咱们能够获得整棵树的结构:
基本上,按照上面说的一步一步来,知道前序遍历和中序遍历求后序遍历就变得很是简单了,今天花点时间记录下来,一方面是作一下知识的回顾,第二点是但愿能够帮助到有须要的朋友,如今也是求职高峰期,常常会在笔试题中遇到相似的东西,不少时候都是考到一些平时不怎么注意的细节。