二叉树Binary tree
每个节点至多有两个孩子,用父子关系表达层级。
- 核心约束
- 左右孩子的角色有别;普通二叉树不要求键有序。
- 适用问题
- 层级表示、表达式树与其他树结构的基础。
- 边界与取舍
- 二叉树、二叉搜索树和堆是不同约束的结构。
常见操作#
n 为节点数,h 为树高,w 为最大一层宽度;普通二叉树不保证有序或平衡。
| 操作 | 时间复杂度 | 条件与说明 |
|---|---|---|
| 从已知节点访问子节点 | 节点保存左右子节点引用。 | |
| 查找任意值 | 没有搜索树的顺序约束,最坏检查全部节点。 | |
| 已知空位置挂接 / 摘除子树 | 只计算修改链接;逐节点销毁子树仍需与子树大小成正比的时间。 | |
| 深度优先遍历 | 递归或显式栈的辅助空间为 。 | |
| 层序遍历 | 队列辅助空间为 。 |
时间与空间#
- 时间复杂度
- 一般查找 / 遍历
- 存储空间
树高可能达到 ;不能从“每节点最多两个孩子”推出对数查找。
基础原理参考资料
Open Data Structures · BinaryTree二叉树表示、父子关系及递归和非递归遍历。