二叉树的周游(c++实现)

        所谓二叉树的周游(遍历)是指按照一定顺序依次访问树中所有结点,并使得每个结点仅被访问一次。这里所说的“访问”是指操作,可以理解成对二叉树结点数据成员的处理,例如输出、修改结点的信息等。

对于线性结构来说,周游是一个很容易的问题。但二叉树是一种非线性结构,每个结点可以有一个以上的直接后继,因此需要把二叉树中的结点转化为顺序结构才能周游整个二叉树。

在此介绍两类周游二叉树的方法及代码:深度优先周游和广度优先周游,以此二叉树为例子(已经懂了的同学可以直接到下面看代码)

深度优先周游二叉树

递归算法:

(1)前序法。其递归定义是:访问根结点;按前序周游左子树;按前序周游右子树。

        按前序法周游上述二叉树的结果:A->B->D->E->H->C->F->I->G->J->K->

(2)中序法。其递归定义是:按中序周游左子树;访问根结点;按前序周游右子树。

        按中序法周游上述二叉树的结果:D->B->H->E->A->F->I->C->J->K->G->

(3)后序法。其递归定义是:按后序周游左子树;按后序周游右子树;访问根结点。

        按后序法周游上述二叉树的结果:D->H->E->B->I->F->K->J->G->C->A->

广度优先周游二叉树:

        二叉树的周游除了按上述的前序、中序、后序周游进行外,还可以从上到下,从左到右地按层次进行,即按层次(广度优先)周游二叉树。

        以上述二叉树为例:广度优先周游二叉树的结果为:A->B->C->D->E->F->G->H->I->J->K->

        根据层次周游二叉树的性质,需要使用一个队列作为辅助的存储结构,在开始周游的时候,首先将根结点放入队列,然后每次从队列中取出队头元素进行处理,每处理一个结点时,按从左到右的顺序把它的所有子结点放入队列。这样,上层结点总是排在下一层结点的前面,从而实现了二叉树的广度周游。

代码如下(本代码用vs分文件编写):

二叉树结点的抽象数据类型:

BinaryTreeNode.h


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值