二进制搜索树
二进制搜索树(二进制树或BSTS也包含以树状结构排列的排序数据。二进制树由“root”和“叶子”数据点或节点组成,该节点在两个方向上分支。
二叉树在内存中存储“项目”(例如数字,名称等),允许快速查找,添加和删除物品。它们可用于实现允许通过其键查找项目的动态项目或查找表。二叉树和相关变化具有许多实际用途,例如数据库中,用于以编程语言和文件压缩中的解析语法。
概述
每棵树从一个根节点开始,包含数据以及对左和右节点的引用。每个左和右节节点也可以分别包含数据和引用自己的左侧和右侧节点。该模式递归地继续,形成树。
运营
本节中的所有代码示例都是使用二进制树的节点的公共类:
1 2 3 4 5 6 7 8 |
|
树遍历:
有两种主要方法来遍历,或迭代一棵树:
深度第一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
宽度第一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 |
|
插入:
要插入节点,请找到小于插入值的最左侧的叶节点。将子节点添加到包含插入值的该节点。
1 2 3 4 5 6 7 8 9 |
|
删除:
删除不太简单。有三种情况需要考虑:
- 情况1:如果已删除的节点没有子项,请从其父节点删除节点。
- 案例2:如果已删除的节点有一个子,请将节点替换为子。
- 案例3:如果已删除的节点有两个子项,请执行以下操作:
- 从当前节点的合适子子开始。
- 发现孩子最左边的孩子。
- 用最左边的孩子的值替换当前节点的值。
- 调用当前节点的右侧的删除功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 21 22 23 23 32 32 32 32 32 32 32 32 32 32 |
|
树形和平衡
引用如下:二进制搜索树。bright.org.。检索到从//www.parkandroid.com/wiki/binary-search-trees/