二叉树常用操作算法集、解释及注意事项

二叉树是一种常用的数据结构,在程序中也经常需要使用二叉树,但是你所使用语言却并不一定提供了二叉树这种数据类型,所以为了方便使用,我们可以自己实现一个二叉树的数据类型。在需要时就像使用其他已定义的类型一样方便。下面给出一些本人写的算法和解释(基于C语言),希望对读者写一个二叉树数据类型有所帮助。0、递归的四条基本法则由于二叉树中的算法大多使用递归来实现,而且使用递归实现也
摘要由CSDN通过智能技术生成
二叉树是一种常用的数据结构,在程序中也经常需要使用二叉树,但是你所使用语言却并不一定提供了二叉树这种数据类型,所以为了方便使用,我们可以自己实现一个二叉树的数据类型。在需要时就像使用其他已定义的类型一样方便。

下面给出一些本人写的算法和解释(基于C语言),希望对读者写一个二叉树数据类型有所帮助。

0、递归的四条基本法则
由于二叉树中的算法大多使用递归来实现,而且使用递归实现也使代码非常简洁和易于理解。但是写一个好的递归算法并不是一件容易的事,所以我觉得在开始这些算法的讲解之前有必要向大家说说递归实现的一些法则。而且本文中的代码都是以下面的法则作为依据的(至少我是这样认为)。

1)基准情形。必须总有某些基准情形,它无需递归就能解出。
2)不断推进。对于那些需要递归的情形,每一次递归调用都必须要使求解状况朝接近基准情形的方向推进。
3)设计法则。假设所有的递归调用都能进行。
4)合成效益法则。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。

1、数据的储存结构和定义
#define TRUE 1
#define FALSE 0

//定义自己的数据类型
typedef char DataType;
typedef int BOOL;

typedef struct BiNode
{
    DataType cData;    //用于储存真正的数据
    struct BiNode *LChild;//指向左孩子
    struct BiNode *RChild;//指向右孩子
}BiNode, *BiTree;

2、基本操作的实现
1)遍历
遍历二叉树是其他操作的基础,二叉树的很多操作都是建立在遍历的基础上的,掌握了遍历对其他算法的理解和实现都大有帮助,那么我们就先来看一看遍历的算法,在二叉树中,根据访问根的次序分为3种,即先序遍历(先访问根,再先序访问左子树,最后先序访问右子树),中序遍历(先中序访问左子树,访问根,最后中序访问右子树)和后序遍历(先后序访问左子树,再后序访问右子树,最后访问根),还有一种就是层次性遍历(借助队列进行),它们的实现如下:
BOOL PreOrderTraverse(BiTree BT, BOOL(*Visit)(BiNode*))
{
    //先序遍历二叉树,对每个结点调用Visit一次,且仅一次
    //实现对结点的某种操作,Visit失败,则遍历失
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值