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