二叉树Binary tree

每个节点至多有两个孩子,用父子关系表达层级。

核心约束
左右孩子的角色有别;普通二叉树不要求键有序。
适用问题
层级表示、表达式树与其他树结构的基础。
边界与取舍
二叉树、二叉搜索树和堆是不同约束的结构。
8412261014
一棵平衡的二叉搜索树示例;普通二叉树不必满足键序。

常见操作#

n 为节点数,h 为树高,w 为最大一层宽度;普通二叉树不保证有序或平衡。

操作时间复杂度条件与说明
从已知节点访问子节点O(1)O(1)节点保存左右子节点引用。
查找任意值O(n)O(n)没有搜索树的顺序约束,最坏检查全部节点。
已知空位置挂接 / 摘除子树O(1)O(1)只计算修改链接;逐节点销毁子树仍需与子树大小成正比的时间。
深度优先遍历O(n)O(n)递归或显式栈的辅助空间为 O(h)O(h)。
层序遍历O(n)O(n)队列辅助空间为 O(w)O(w)。

时间与空间#

时间复杂度
一般查找 / 遍历 O(n)O(n)
存储空间
O(n)O(n)

树高可能达到 O(n)O(n);不能从“每节点最多两个孩子”推出对数查找。

基础原理参考资料

Open Data Structures · BinaryTree二叉树表示、父子关系及递归和非递归遍历。

13 个概念