例题引入
要求出二叉树,这里要用到整体的思想,先看一道例题
先序遍历:A B D F C E G H
中序遍历:B F D A G E H C
首先要知道的点
首先要明白每种遍历方式,这里我就直接给你了。
先序遍历:根左右 中序遍历:左根右 后序遍历:左右根
要记住也很简单,就是把“根”这个字往右移动一位。
那么记住这个有什么用呢?
接下来开始讲解。
例题讲解
步骤一
首先要知道,先序遍历一定是从根结点先开始的,就如同上边讲的,根左右。
所以,根节点就是A,先画下来。
此时再看先序遍历的,就不能分清楚后面的一串BDFC....到底是左子树还是右子树。这时候就看中序遍历,找到A点。
中序遍历是左根右 ,那么根据整体思想,把A的左边看作一个整体,右边也看做一个整体。
那么左子树就是BFD,右子树就是GEHC。
(先看左子树)但是,谁是左子树的根节点呢?这时候又回到先序遍历,因为先序遍历遍历方式是根左右,又知道BFD是左子树,那么就能够通过先序遍历知道左子树的根节点是谁,看到先序遍历,找到BDF。
根据根左右,A是根,BDF是左,那么B就是左子树的根(先序遍历左子树开头第一个就是根), 同样的道理,CEGH是右子树,那么C就是右子树的根。画下来。
步骤二
那么接下来该如何找剩下的呢?
接下来首先把A给删了,已经找满了左右子树的根节点就不需要了。
我们先找B结点的左右子树,那么又是同样的步骤,因为已经知道了B所在的子树只有BDF,那么D、F该怎么分配呢?
将B视为根节点,先序遍历根左右 ,此时不知道DF究竟在左子树还是在右子树(看作整体)
这时候看中序遍历,左根右,B的左边什么都没有,所以它没有左子树,所以DF一定是右子树上的点。再根据先序遍历根左右,得到D是右子树的根节点。画下来。
那么B的左右子树找完了,可以把B删了
接下来又是同样的步骤,找F是D的左子树还是右子树,看中序遍历,左根右,知道F一定是D的左子树。
那么右边从C开始也是同样的步骤,依次找就行了。
例题答案
总结
总体思想就是确定根后运用整体思想,然后根据各个遍历的特点去找到每个点应该在的位置。