前序遍历-》首先访问根结点,
然后遍历左子树,
最后遍历右子树。
在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历-》首先遍历左子树,
然后访问根结点,
最后遍历右子树。
在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
后序遍历-》首先遍历左子树,
然后遍历右子树,
最后访问根结点。
在遍历左、右子树时,仍然先遍历左子树,再遍历右子树,最后访问根结点。
记忆麻烦,直接记:前就是首先,中就是中间,后就是最后,前序遍历就是首先根结点,中序遍历就是中间再访问根结点,后序遍历就是最后访问根结点!
1. 已知前序、中序遍历,求后序遍历
前序遍历: DBAECHMZ
中序遍历:ABCEDMHZ
先根据前序遍历得到根结点为D。根据中序遍历就可以知道ABCE为左子树,MHZ为右子树。
再根据前序遍历,D之后就是BAEC为左子树,所以B是离根节点最近的一个左子树的根结点,B为ADCE左子树的根结点,
再根据前序遍历,D之后的HMZ为右子树, 所以H是离根结点最近的一个右子树的根结点,H为HMZ右子树的根结点,
所以: D
∧
B H
接下来截断为:
前序:BAEC
中序:ABCE
再根据前序遍历,左子树根结点为B,根据中序遍历就可以知道A为左子树,CE为右子树
再根据前序遍历,B之后就是A为左子树,没啥好分析了
再根据前序遍历,B之后就是EC为右子树,所以E是离根结点最近的一个右子树的根结点,E为EC右子树的根结点
所以: B
∧
A E
同理,再分析右子树,最后可得二叉树的结构为: D
∧
B H
∧ ∧
A E M Z
/
C
搞定! 一般先用前序遍历跟后序遍历分析出哪个是根结点,用中序遍历分析出左右子树!愉快的一晚!