二叉树 是一种典型的树树状结构。从名称就可得知,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。本文就介绍一下二叉树的遍历,拓展应用,以及堆与二叉树的关系。
一、二叉树特点
- 是一个树状结构
- 每个节点,最多只能有 2 个子节点
- 树节点的数据结构
{value, left?, right?}
二、二叉树遍历
- 二叉树 interface
1 | |
- 二叉树节点示例
1 | |
1)二叉树 前序遍历
- 递归实现
1 | |
- 栈实现
1 | |
2)二叉树 中序遍历
- 递归实现
1 | |
- 栈实现
1 | |
3)二叉树 后序遍历
- 递归实现
1 | |
- 栈实现
1 | |
4)结果输出
测试:
1 | |
输出:
1 | |
三、二叉搜索树 BST
1)二叉搜索树 BST (Binary Search Tree) 特点
- left (包括其后代)
value <= root value - right (包括其后代)
value >= root value - 可使用 二分法 进行快速查找
2)数组 vs 链表 vs 二叉搜索树
数组: 查找快 O(1),增删慢 O(n)
链表: 查找慢 O(n),增删快 O(1)
二叉搜索树 BST: 查找快 O(logn),增删快
3)求一个二叉搜索树的第 K 小值
如图:
思路:二叉搜索树在中序遍历后,可返回一个有序递增的数组,所以求一个二叉搜索树的第 K 小值就变得很简单,代码如下:
1 | |
四、红黑树
特点:
- 一种自平衡二叉树
- 分为 红/黑 两种颜色,通过颜色转换来维持树的平衡
- 相对于普通平衡二叉树,它维持平衡的效率更高
五、B 树
六、堆 Heap
特点:
- 堆(
Heap) 是完全二叉树,比 BST 结构灵活 - 最小堆:
父节点 <= 子节点 - 最大堆:
父节点 >= 子节点
结构:
- 堆,逻辑结构 是一颗二叉树,查找快
- 物理结构 是一个数组,连续存储,节省空间
- 堆栈模型(基础类型和引用类型)
堆 vs BST
- 堆查询比 BST 慢
- 堆删除比 BST 快,维持平衡更快
- 整体时间复杂度都是
O(logn)级别,即树的高度(层级)
欢迎访问:天问博客
本文作者: Tiven
发布时间: 2023-07-20
最后更新: 2023-07-24
本文标题: 【数据结构与算法】(12):二叉树
本文链接: https://www.tiven.cn/p/b33ab060/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
发布时间: 2023-07-20
最后更新: 2023-07-24
本文标题: 【数据结构与算法】(12):二叉树
本文链接: https://www.tiven.cn/p/b33ab060/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!









