学习笔记//前序遍历、中序遍历、后序遍历、二叉树

前序遍历、中序遍历、后序遍历与二叉树

图一
图一

1前序遍历

也称先序遍历。指对于当前结点,先输出该结点,再输出它的左孩子,最后输出它的右孩子。

如图一,
对于A结点,先输出A,接着输出左孩子B。 A->B
对于结点B,其左孩子为D,输出。 A->B->D
对于结点D,左右孩子为空。回至B看其右孩子E。
对于结点E,先输出自身,再看其左孩子G,输出。A->B->D->E->G
对于结点G,无左右孩子。回至结点A。此时A的左边已经全部输出,换看其右孩子C。
对于结点C,输出。其无左孩子,有右孩子F,输出。
A->B->D->E->G->C->F
对于结点F,左孩子为H,右孩子为I,先后输出。
得到前序遍历:A->B->D->E->G->C->F->H->I

2中序遍历

对于当前结点,先输出它的左孩子,再输出该结点,最后输出其右孩子。

如图一,
对于结点A,其左孩子为B,对于结点B,其左孩子为D,对于结点D,无左右孩子,于是先输出D,回到结点B,输出该结点,再看其右孩子E。 D->B
对于结点E,其左孩子为G,于是先后输出G,E。 D->B->G->E
回到结点A,其左边已经全部输出,于是其后输出自身,再看其右孩子C。 D->B->G->E->A
对于结点C,无左孩子,输出自身,再看其右孩子F。D->B->G->E->A->C
对于结点F,其左孩子为H,H无左右孩子,可输出,其次输出自身,再输出右孩子I。
得到中序遍历D->B->G->E->A->C->H->F->I

3后序遍历

对于当前结点,先输出左孩子,再输出右孩子,最后输出自身。

如图一,
对于结点A,其左孩子为B,对于结点B,其左孩子为D,D无左右孩子,先输出。回到结点B看其右孩子E,对于结点E,其左孩子为G,无右孩子,于是输出G,再输出E。 D->G->E
对于结点B,其左右孩子已经输出完毕,于是输出该结点。 D->G->E->B
对于结点A,其左边输出完成,接下来先看其右侧。对于A的右孩子C,其无左孩子,看其右孩子F,对于结点F,其左右孩子分别为H、I,此时可先后输出H、I、 F。 D->G->E->B-> H ->I->F
对于结点C,右孩子输出完成,可以输出该节点C,最后输出A
得到后序遍历D->G->E->B-> H ->I->F ->C->A

4由前序遍历,中序遍历得到二叉树

已知:
前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
求这棵二叉树
先看前序遍历,前序遍历按照中左右的顺序,前序遍历: GDAFEMHZ。可以找出这棵树的根结点G。
再看中序遍历G的位置,中序遍历按照左中右的顺序,可以将根结点左右的结点划分开来,中序遍历: ADEFGHMZ。可以得到,根结点左边有ADEF,右边有HMZ。
先排出左边顺序,结合两种遍历中这四个结点的顺序
前序遍历: DAFE;中序遍历: ADEF
先看前序遍历(中左右),定下D为左子树的根。
再看中序遍历(左中右),找出D的位置,其前为D的左孩子,确定为A。
其后结点EF在D右侧。
回看前序遍历(中左右),F在E前面,说明F先被前序遍历。
于是可以画出
在这里插入图片描述
再看右边的HMZ。
结合前序遍历(中左右): MHZ ; 中序遍历(左中右): HMZ
不难得到:
在这里插入图片描述
于是得到最后的整棵二叉树:
在这里插入图片描述

5由中序遍历,后续遍历得到二叉树

已知
中序遍历D->B->G->E->A->C->H->F->I
后序遍历D->G->E->B-> H ->I->F ->C->A

第一步,定下二叉树根结点,找后序遍历最后一个结点,得二叉树根结点为A。随后根据中序遍历将左右分出来。

A左边:中序遍历D->B->G->E
后序遍历D->G->E->B
A右边:中序遍历C->H->F->I
后序遍历H ->I->F ->C

第二步,确定左边的“根结点” 后序遍历最后一个结点,确定为B。随后根据中序遍历划分B左右。
B左边:D
B右边:中序遍历G->E;后序遍历G->E
再由此时后序遍历最后一个结点,确定B右边“根结点”为E,回看中序遍历,知G为E左孩子。
至此定下左边二叉树图:
在这里插入图片描述
第三步,确定右边的“根结点”,
A右边:中序遍历C->H->F->I
后序遍历H ->I->F ->C

由后序遍历最后一个结点,确定为C。
再看中序遍历C位置,其前面无结点,故C无左孩子。其右边有
C右边:中序遍历 H->F->I
后序遍历H ->I->F
由此时后序遍历最后一个结点,确定F为C右边的“根节点”,再由此时中序遍历,确定F的左孩子右孩子。
在这里插入图片描述
最后得到全图:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值