首页 > 编程语言 >二叉树及其存储实现C语言(附上源码)

二叉树及其存储实现C语言(附上源码)

时间:2024-07-26 17:27:59浏览次数:10  
标签:结点 右子 C语言 源码 二叉树 序号 BinTree 节点

1.什么是二叉树

        二叉树是一种特殊的树型结构,其特点是每个结点至多只有两棵子树(即二叉树不存在度大于二的结点),并且二叉树的子树有左右之分,次序不可颠倒【有序树】。 

2.二叉树的定义

二叉树T:一个有穷的结点集合。

        -这个集合可以为空;

        -若不为空,则它是由根结点和称为其左子树TL和右子树TR的 两个不相交的二叉树组成。 

 二叉树具体五种基本形态

 

 二叉树的子树有左右顺序之分 

 

3.特殊的二叉树

3.1完美二叉树(满二叉树)

每一个节点都有两个儿子节点,除了叶子节点,但是叶子节点全在一层。 

 

3.2完全二叉树 

        意思是说,对完美二叉树进行自上而下,从左到右的编号后,完全二叉树也有其对应编号的节点,但是可以缺少最后最右边几个叶子节点,但是不能缺少中间的叶子节点。 

3.3斜二叉树

 

3.4二叉排序树

左子树所有结点的关键字均小于根结点的关键字;

右子树所有结点的关键字均大于根节点的关键字;

左子树和右子树又各是一棵二叉排序树。 

也就是我们二分查找得到的那棵树:

 

3.5平衡二叉树 

树上任意一个结点的左子树和右子树的深度之差不超过一。 

 

4.二叉树的性质

4.1一个二叉树第i层最多有2的i-1次方个节点:

 

4.2一个k层二叉树最多有2的k次方-1个节点:

 

 

4.3非空二叉树上的叶结点数(n0)等于度为2的结点数(n2)加1:即n0 = n2 + 1 

 

5.二叉树的存储结构

1. 顺序存储结构

对于完全二叉树

完全二叉树:按从上至下、从左到右顺序存储 n个结点的完全二叉树的结点父子关系: 

 非根结点(序号 i > 1)的父结点的序号是 [ i / 2 ];

 结点(序号为 i )的左孩子结点的序号是 2i, (若2 i <= n,否则没有左孩子);

 结点(序号为 i )的右孩子结点的序号是 2i+1, (若2 i +1<= n,否则没有右孩子); 

 

对于一般二叉树

 也可以采用这种结构,但会造成空间浪费……

 

 

2. 链表存储 

typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
}

 

 

 

标签:结点,右子,C语言,源码,二叉树,序号,BinTree,节点
From: https://blog.csdn.net/weixin_65866298/article/details/140719663

相关文章