树是一种层次化的非线性结构:节点通过边连接,有且仅有一个根,除根外每个节点只有一个父节点,且不存在环。树是文件系统、DOM、表达式解析以及堆、BST 等许多数据结构的基础。

树基础(Trees)

树由节点组成:从根到任意节点有唯一路径。在二叉树中,每个节点最多有左、右两个孩子。访问所有节点常用 BFS(广度优先 / 层序)DFS(深度优先:先序、中序、后序);二者也是图遍历与大量面试题的基础模板,遍历一棵含 个节点的树时间复杂度为

二叉查找树(Binary search trees)

二叉搜索树(BST) 在二叉树基础上满足 BST 性质:左子树所有键值小于当前节点,右子树大于当前节点,中序遍历得到升序序列。树较平衡时,查找、插入、删除的平均时间均为 ;若按有序顺序插入会退化为链表,最坏为 。语言里的 std::map / TreeMap 等有序容器都建立在这一思想上,工程实现通常配合 AVL、红黑树等平衡树维持高度。

堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)

是一棵满足堆性质的完全二叉树:大顶堆中父节点不小于子节点,小顶堆反之。用数组存储时,父子下标有固定换算关系,插入与删除极值可在 内完成;优先级队列的底层通常就是堆。堆排序、Top-K、Dijkstra 等场景都依赖这一结构。