数据结构中的树

1. 树

即是以层次化方式组织和存放数据的特定数据结构

边: 节点与节点之间的连线

根节点:

叶子节点:

度: 节点的度数即为其分叉数, 即其子节点个数. 整棵树的度数是所有节点中度数的最大值

节点深度: 根节点到该节点的唯一路径长(即边的数量)

树高: 所有节点中深度的最大值

2. 二叉树

每个节点最多有两个子节点, 即左孩子和右孩子

平衡因子: 平衡因子是针对节点的一个概念, 节点左子树的深度与右子树的深度即为该节点的平衡因子.

2.1 二叉树遍历方式

2.2 完全二叉树

一棵二叉树, 除了最后一层之外, 每层节点都是满的, 且最后一层所有节点都尽可能靠左. 如果一棵树为完全二叉树, 那么其可以用数组的形式表示.

性质:

1. 具有n个节点的完全二叉树深度为k = [log_{2}(n)], 这个向上取整的含义是, 假如n为8, 取对数的值正好为整数3, 但是也要向上取整, 层数便为4.

2. 具有奇数个节点的完全二叉树的度为1的节点个数为0, 而具有奇数个节点的完全二叉树的度为1的节点个数为1.

3.1 具有n个节点的完全二叉树, 如果节点从1开始编号, 对于第i个节点:

i = 1, 为根节点

i > 1, 父节点为i / 2(取整), 如果2 * i <= n, 左子节点为2 * i, 如果2 * i < n右子节点为2 * i + 1

3.2 具有n个节点的完全二叉树, 如果用数组形式表示, 对于下标i:

i = 0, 为根节点

i > 0, 父节点为(i - 1) / 2(取整), 如果2 * (i + 1) <= n, 左子节点为2 * i + 1, 如果2 * i < n右子节点为2 * i + 2 

2.2.1 堆

堆是一种特殊的完全二叉树, 分为大顶堆和小顶堆, 大(小)顶堆即为所有节点的值均大(小)于等于其子节点(如果存在的话)的值. 如果用一个数组表示大顶堆(含有n个节点, 小顶堆相反), 对于下标为i的节点来说:

如果含有左子节点(2 * i + 1 < n), 那么有heap[i] >= heap[2 * i + 1] (右子节点省略)

堆可以用来排序

2.2.2 满二叉树

满二叉树即为最后一层也是满的完全二叉树, 即节点总数满足2^{n} - 1

2.3 二叉搜索(查找)树

性质:

树上任意一个节点均满足, 如果去左子树不为空, 那么其左子树上所有节点的值均小于等于其节点值, 右子树如果不为空, 那么右子树所有节点的值均大于等于其节点值. 增删查的时间复杂度理想情况下是O(log_{2}n), 最坏情况是O(n).

2.4 平衡二叉树

性质:

所有节点的平衡因子的绝对值均不大于1的树.

2.5 平衡二叉搜索树(AVL树)

2.6 红黑树

2.7 哈夫曼树(最优二叉树)

2.8 线索二叉树

3. 多叉树

3.1 B(B-)树

3.2 B+树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值