二叉树

二叉树的定义

二叉树是一种有序树,它是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

它的特点是每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的定义

(1)满二叉树

一棵深度为k且有2k−1个节点的二叉树称为满二叉树。

 

 

 

二叉树的顺序存储

这种存储结构适用于完全二叉树,其存储形式为:用一组连续的存储单元按照完全二叉树的每个节点编号的顺序存放节点内容。

 

 

这种存储结构的特点是空间利用率高、寻找孩子和双亲比较容易,但是插入和删除节点不方便。

 

(2)完全二叉树

若设二叉树的高度为h,则共有h层。除第h层外,其他各层(0~h−1)的节点数都达到最大个数,第h层从右向左连续缺若干节点,这就是完全二叉树。

 

二叉树可以采用两种存储方式: 顺序存储结构和链式存储结构

 

 

 

二叉树的链式存储 常见的二叉树节点结构:

其中,lchild和rchild是分别指向该结点左孩子和右孩子的指针,item是数据元素的内容,在C语言中的类型定义为:

typedef struct _bt_node {

  entry_type item;

  struct bt_node *lchild,*rchlid;

} bt_node,*b_tree;

 

 

二叉树的链式存储 通过非递归的方式构建一个顺序二叉树,二叉树中每个节点都是一个char型的数据,这个二叉树遵循以下规则。

下图 实例构建的二叉树 所有右孩子的数值大于根节点。 所有左孩子的数值小于根节点。

 

 

 

这样,为了方便起见,先设定一个数据集合及构建顺序,如下所示(数据的构建顺序自左向右):e、f、h、g、a、c、b、d。与此相对应的二叉树如图所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   cnetsa  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示