您的位置:首页 > 理论基础 > 数据结构算法

C--数据结构--树的学习

2020-07-14 04:58 204 查看

6.2.1二叉树的性质

1.二叉树

性质:
1.若二叉树的层次从1开始,则在二叉树的第i层最多有2^(i-1)个结点

2.深度为k的二叉树最多有2^k -1个结点 (k>=1)

3.对任何一颗二叉树,如果其叶结点个数为n0,度为2的非叶结点个数为n2,则有 n0=n2+1

4.具有n个结点的完全二叉树的深度为 [log₂n]+1 //log以2为底的n

5.

2.完全二叉树:

特点:
1.只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;‘
2.对任一结点,如果其右子树的深度为L,则其左子树的深度必为 L 或 L+1

【总结】:

1.若每层仅有一个结点,则树高h为1025;且其最小树高为 log₂1025 + 1=11,即h在11至1025之间。

2.深度为h的满m叉树共有mh-1个结点,第k层有mk-1个结点。

6.2.2二叉树的存储结构

1.顺序存储结构(数组表示)
n个结点的二叉树,根节点编号为1,其余结点自上到下,自左到右编号,然后将完全二叉树上编号为 i 的结点依次存储在一维数组中下标为 i-1 的元素中。

代码:
#define MAX_TREE_SIZE 100
typedef TElemType
SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
:数组表示:没有元素的结点也要空开相应位置


特点:非完全二叉树就会浪费很多存储空间,单支书就是一种极端情况,比如一个深度为k的有k个结点的单支书就需要2^k -1的一维数组

2.链式存储结构

链表中一个结点相应地粗存储二叉树的一个结点

二叉链表:

每个结点包含两个指针域和一个数据域,分别用来储存指向二叉树中结点的左右孩子的指针和结点信息
【图】

代码
tyoedef sttuct BiTNode{
TElemType data;
Struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;
三叉链表:

每个结点包含三个指针域和一个数据域用来指向该结点的双亲结点
【图】

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: