二叉树的遍历以及笔试题

本篇介绍二叉树最常见的三种遍历方式:先序、中序和后序遍历方式。

1、定义

      二叉树是由3个基本单元组成:根节点、左子树和右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。例如从L、D、R分别表示遍历左子树、访问根节点和遍历右子树,则可有DLR、LDR、LRD、DRL、RDL、RLD这6种遍历二叉树的方案。若限定先左后右,则只有前3种情况,分别称为先(根)序遍历、中(根)序遍历和后(根)序遍历。基于二叉树的递归定义,可得下述遍历二叉树的递归算法定义。
先序遍历二叉树的操作定义如下:
若二叉树为空,则空操作;否则
(1) 访问根结点;
(2) 先序遍历左子树;
(3) 先序遍历右子树。
中序遍历二叉树的操作定义如下:
若二叉树为空,则空操作;否则
(1) 中序遍历左子树;
(2) 访问根结点;
(3) 中序遍历右子树。
后序遍历二叉树的操作定义如下:
若二叉树为空,则空操作;否则
(1) 后序遍历左子树;
(2) 后序遍历右子树;
(3) 访问根结点。

2、举例,给一棵树写出其先、中、后序遍历的结果

在这里插入图片描述
若先序遍历此二叉树,按访问结点的先后次序将结点排列起来,可得到二叉树的先序序列为:-+a*b-cd/ef;中序序列为:a+b*c-d-e/f;后序序列为:abcd-*+ef/-

3、已知一颗二叉树的中序序列和后序序列分别是BDCEAFHG和DECBHGFA,画出这颗树

(1)由后序遍历特征,根结点比在后序序列尾部,即根结点是A;
(2)由中序遍历特征,根结点必在中间,而且其左边必须全部是左子树子孙(BDCE),其右部必全部是右子树子孙(FHG);
(3)继而根据后序中的DECB子树可确定B为A的左孩子,根据HGF得出F为A的右孩子;依次类推,可以唯一确定一棵二叉树如图1所示。
但是,由一棵二叉树的先序序列和后序序列不能唯一确定一棵二叉树,因为无法确定左右子树两部分。例如,如果有先序序列AB,后序序列BA,因为无法确定B为左子树还是右子树,所以可以得到如图2所示的两棵不同的二叉树。

图1(由中序序列和后序序列确定的二叉树)

在这里插入图片描述

图2(两颗不同的二叉树)

在这里插入图片描述

4、笔试题:二叉树的后序序列为DBFEGCA中序序列为DBAFECG,求它的先序序列

(1) 由后序序列为DBFEGCA得到二叉树的根为A,由中序序列为DBAFECG得到二叉树的左子树子孙为:DB,右子树子孙为:FECG。
(2)我们先看它的左子树子孙,由后序序列为DB,中序序列为DB得到B为A的左孩子,D为B的左孩子。
(3)再看它的右子树子孙,由后序序列FEGC,中序序列FECG得到C为A的右孩子,C的左子树子孙为FE右孩子为G,又由后序序列FE,中序序列FE得到E为G的左孩子,F为G的左孩子
得到二叉树如下图:
r)
它的先序序列为:ABDCEFG

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值