二叉树的存储结构和实现

一、二叉树存储结构分为顺序存储和链式存储
二、二叉树性质
   1:二叉树第i层上的节点数目最大是2的i-1次方(i>=1)
   2:深度为k的二叉树节点数目最多为2的k次方再减1
   3:在任意一个二叉树中,叶子节点(度为0的节点)=度为2的节点+1
   4:二叉树的节点的度可以为0,也可以为1,可以为2;二叉树有两个特例:即满二叉树和完全二叉树;满二叉树每一层节点都是最大的,并且没有度为1的节点;
   5:具有n个节点的完全二叉树的深度是lg n    +1
三、二叉树的顺序存储结构
   二叉树的顺序存储采用数组来表示, 用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号。
  缺点:深度为k的右单支树为k个节点,但是如果用顺序存储的话,就需要2的k次方再减1个节点空间。
  优点:所以一般满二叉树和完全二叉树可以使用并且能够利用顺序存储的优点;既能够利用存储空间,又可以利用数组的下表值来确定树的节点位置以及节点直接的关系;
  
   c++代码实现:
二叉树的顺序存储表示:
#define MAX_TREE_SIZE 100//二叉树最大节点数
typedef TElemType SqBitTree[MAX_TREE_SIZE];

struct position
{
int level,oeder;//节点的层和本层序号
}


顺序存储的基本操作(23个)
1:构造空二叉树
2:销毁二叉树
3:构造顺序二叉树
4:二叉树判空
5:求二叉树深度
6:二叉树根
7:返回二叉树某个节点的值
8:给二叉树某个节点赋新值
9:返回节点双亲
10:返回节点左孩子
11:返回节点右孩子
12:返回节点左兄弟
13:返回节点右兄弟
14:把从q的j节点开始的子树移为从T的i节点开始的子树
15:先序遍历
16:中序遍历
17:后序遍历 




四、二叉树的链式存储表示

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。


二叉链表表示:

typedef struct BitNode

{

TElemType data;

BitNode *lchild,*rchild;//左右孩子指针


}BitNode ,*BiTree;


基本操作(22个)

1:构造空的二叉树

2:销毁二叉树

3:创建二叉树

4:二叉树判空

5:求二叉树深度

6:求二叉树根

7:返回某个节点的值

8:返回节点双亲

9:返回二叉树中某个节点值得指针

10:返回左孩子

11:返回右孩子

12:返回左兄弟

13:返回右兄弟

14:插入子树

15:删除子树

16:先序遍历

17:中序遍历

18:后序遍历




三叉链表表示:

    //三叉链表表示

typedef struct BitTNode

{

   TElemType data;

   BitTNode *parent,*lchild,*rchild;


}BitTNode,*BitTree;


基本操作:

1:构造空的二叉树

2:销毁二叉树

3:创建二叉树

4:二叉树判空

5:求二叉树深度

6:求二叉树根

7:返回某个节点的值

8:返回节点双亲

9:返回二叉树中某个节点值得指针

10:返回左孩子

11:返回右孩子

12:返回左兄弟

13:返回右兄弟

14:插入子树

15:删除子树

16:先序遍历

17:中序遍历

18:后序遍历


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值