“得到的二叉树最小化”
形式陈述 ​
二叉树是有根有序树的特化:每个节点至多有两个孩子,且区分左孩子与右孩子——仅有一个孩子时也必须指明它是左还是右。等价的递归定义:二叉树要么为空,要么由一个根、一棵左二叉子树与一棵右二叉子树组成。节点的深度是根到该节点的边数,高度是该节点到其子树中最深叶的边数。含
上界来自退化成链,下界因为高度为
直觉
二叉树是“二路递归分解”的形状:每个节点代表一次一分为二的决策或一个二元运算,整棵树是分解过程的完整记录。左右有别不是形式主义,两个方向通常承载不对称的语义——小与大、then 与 else、比特
例子与边界
表达式
边界处的区分最易出错。二叉树不是二叉搜索树:后者还要求键满足子树范围约束;也不是堆:堆另加形状与堆序不变量。“每个节点至多两个孩子的无序树”同样不是二叉树——根下只挂一个孩子时,“左独子”与“右独子”是两棵不同的二叉树,作为无序树却是同一棵;反过来,把无序树的孩子随手排成左右,会引入原本不存在的顺序信息。约定也需留意:本页取根深度为
形状与键值也必须分层理解:同一组键可以放进许多不同二叉树形状,只有搜索树、堆等额外不变量才会排除其中一部分。满二叉树要求内部节点都有两个孩子,完全二叉树则只约束逐层填充次序;前者不必完全,后者的末层也可以尚未填满。固定高度
推论与应用
二叉树是一族核心结构的公共骨架:加上键序约束得到搜索树,加上形状与堆序约束得到二叉堆,按频率自底向上合并得到 Huffman 编码树,其中叶表示符号、根叶路径给出前缀码。Cartesian Tree同时固定数组的中序下标与堆序优先级,把区间最小值和树祖先结构接起来;它不是“任意二叉树再放一组键”,而是由两条序共同确定的专门表示。
遍历序还能把指针树翻译成序列:前序、中序和后序改变递归访问次序,广度优先搜索则给出层序;它们分别服务序列化、表达式求值与由遍历序重建树。平衡括号树表示按 DFS 进入/退出写下一对括号,并用括号匹配恢复父子与子树边界;简洁有序树在接近信息论下界的 bit 空间中为这些导航操作建立 rank/select 支持。这里改变的是表示与空间模型,不是二叉树的递归定义。编译器的抽象语法树、分治递归树和比较决策树则继续使用同一形状承载不同语义;最后一种还把比较次数化为根叶路径长度,支撑比较排序下界。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed., Addison-Wesley, 2011,Chs. 1–6。