二叉树的计算:前序、中序和后序

一、二叉树的概念

二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

二、二叉树的遍历方式(理解遍历的嵌套关系,层的概念)

a.前序(根左右):先由根节点出发,遍历根节点的左子树(左子树的遍历方式为前序遍历),再遍历根节点的右子树(右子树的遍历方式为前序遍历)

b.中序(左根右):根节点分为左子树和右子树,先遍历左子树(右序遍历),然后回到根节点,再遍历右子树(右序遍历)

c.后续(左右根):根节点分为左子树和右子树,先遍历左子树(后序遍历),再遍历右子树(后序遍历),最后回到根节点

在上述遍历过程中,每遇到一个根节点,根节点与两棵子树就构成了一层的结构,对每一层都要有前序、中序和后序的概念,这样就会很容易理解三种遍历方式。

三、例子:已知前序、中序,写出后序遍历

前序:ABCDEFGHK

中序:BDCAEHGKF

解题思路:

a.根据前序、中序画出二叉树构建图

b.根据二叉树图写出后序遍历

1.根据前序(根左右)和中序(左根右)的遍历特点可以知道第一个根节点为A

2.已知第一个根节点为A,根据中序遍历的特点(左根右)BDCAEHGKF,可知第一个根节点的左子树有BDC三个节点,右子树有EHGKF五个节点

3.现在只看A根节点的左子树的前序遍历BCD和中序遍历BDC可知,B是A的左子树的根节点且B没有左子树,而B的右子树的根节点为C,C左节点为D,没有右节点(到此A的左子树构建完成)

4.同理可以构建A的右子树,根据A根节的右子树的前序遍历EFGHK和中序遍历EHGKF可知,E是A的右子树的根节点且E没有左子树。现在看E的右子树,因为E的右子树的前序为FGHK,中序为HGKF,可知F是E的右子树的根节点,且F在E的中序的最后一位,所以F只有左子树,且F的左子树的根节点为G,剩下的就很好判断,G的左子树为H,右子树为K,下图为根据前序和中序构建完成的二叉树。

根据二叉树图和后序的构建方法,很容易就可以得出后序遍历(补位法

1.首先知道该二叉树为9个节点,所以写下— — — — — — — — —

2.根据二叉图可知第一层的根节点为A,所以最后以为为A即— — — — — — — — A

3.根据A的左子树有三个节点,且可以知道前三位为左子树,且B为A的左子树的根节点,所以前三位的最后一位是B,同理可知B的右子树的根节点为C,所以前三位的倒数第二位为C,即DCB — — — — — A

4.同理很容易得到A的右子树所以二叉树的后序遍历为DCBHKGFEA

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值