赞
踩
存储的是具有“一对多”关系的数据元素的集合
从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推, 一棵树的深度(高度)是树中结点所在的最大的层次
都有相同的父结点的子结点
整棵树, 子节点最多的个数是m,那么这棵树就是m阶树。
满足以下两个条件的树:
拥有的子树数(结点有多少分支)称为结点的度(Degree)
如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树
满二叉树的性质:
如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree)
一棵空树,或者是具有下列性质的二叉树
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
B-tree (中间的短线是英文连接符), 全称Balance-tree(平衡多路查找树)
一颗m阶B树,或为空树,或为满足下列特性的m叉树。
树中每个结点最多含有m棵子树;
若根结点不是叶子结点,则至少有两颗子树;
除根结点之外的所有非叶子结点至少有p个子节点(⌈m/2⌉ ≤ p ≤ m, ⌈m/2⌉为向上取整, 也可以用 ceil(m/2)
表示);
所有的非叶子结点中包含以下数据:( n \color{#52c41a}{n} n, A \color{#1890ff}A A0, K \color{#fa8c16}K K1, A \color{#1890ff}A A1, K \color{#fa8c16}K K2,…, K \color{#fa8c16}K Kn, A \color{#1890ff}A An)
- ⌈m/2⌉ ≤ n ≤ m
- Ki(1≤i≤n)为关键字,且关键字按升序排序
- Ai为 指向子树的指针, 且Ai-1指向的子树中所有结点的关键码均小于Ki, An指向的子树中所有节点结点的关键码均大于Ki ( 即:每个数据Ki两旁的指针,左边指针的结点的关键码均小于Ki, 右边指针的结点的关键码均大于Ki)
所有的叶子结点都出现在同一层次上,即所有叶节点具有相同的深度,等于树高度。并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空), 如下图所示
type Node struct {
KeyNum int // 结点关键字个数
Keys KeyType // 关键字数组, Keys[0]不使用
parent *Node // 父结点
children *Node // 子结点
}
m阶的B+树的特征:
有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素
B+树的优势
根-左-右
结果:
1 2 4 5 3 6 7
解析:
左-根-右
结果:
4 2 5 1 6 3 7
解析:
左-右-根
结果:
4 5 2 6 7 3 1
解析:
按照二叉树中的层次从左到右依次遍历每层中的结点。
实现思路是:
通过使用队列的数据结构,从树的根结点开始,依次将其左孩子和右孩子入队。
而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后顺序就是层次遍历的最终结果。
结果:
1 2 3 4 5 6 7
解析:
根结点 1 入队
队列内容: 1
根结点 1 \color{#1890ff}{1} 1 出队,出队的同时,将左孩子 2 和右孩子 3 分别入队
队列内容: 2 3
队头结点 2 \color{#1890ff}{2} 2 出队,出队的同时,将结点 2 的左孩子 4 和右孩子 5 依次入队
队列内容: 3 4 5
队头结点 3 \color{#1890ff}{3} 3 出队,出队的同时,将结点 3 的左孩子 6 和右孩子 7 依次入队
队列内容: 4 5 6 7
不断地循环,直至队列内为空。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。