Evanalysis
4.1预计阅读时间: 3 分钟

4.1 Binary tree 与 BST 操作

用 traversal order、reconstruction logic 与 binary-search-tree invariant 严谨阅读 tree algorithms。

课程目录

CSCI2520:资料结构

针对 CSCI2520 资料结构基础的结构化笔记,重视操作层级推理与选择性互动示范。

章节 0程序基础1
章节 2List 与 recursion1

Tree 很容易被背坏。你可以背 preorder、inorder、postorder,但仍然不理解每 一种 order 保存了什么结构信息。课程用 binary-tree traversal 和 BST operations,要求我们更细心地读结构。

Binary tree 术语

定义

Binary tree

Binary tree 是每个 node 最多有两个 children 的 tree;存在时会分成 left child 和 right child。

Left-right distinction 是结构的一部分。即使 node set 一样、parent-child 关系看似相近,左右 child 交换后也可能是不同的 binary tree。

Traversal orders

对 root RR、left subtree LL、right subtree TT

  • preorder:先 RR,再 LL,再 TT
  • inorder:先 LL,再 RR,再 TT
  • postorder:先 LL,再 TT,再 RR

这三个不是任意 list,而是保存不同信息。

例题

为什么 inorder alone 不够

Sequence (B, A, C) 可以来自不同 tree。AA 可以是 root,BB 在左、CC 在 右;但其他 shape 也可能有同样 inorder。Inorder alone 记录 left-root-right 次序,未必记录 root hierarchy。

Reconstruction 需要两个 compatible traversals

Tutorial 的标准方法是:

  1. 用 preorder 或 postorder 找 root;
  2. 用 inorder 把 nodes 分成 left subtree 和 right subtree;
  3. 对两边 recursively 重复。

若 keys distinct,preorder plus inorder 足够;postorder plus inorder 也 类似。Preorder plus postorder alone 通常不能唯一决定 binary tree。

Binary search tree

定义

Binary search tree

BST 是一棵 binary tree,所有 keys unique,且每个 node 都满足:left subtree 内所有 key 小于 node key,right subtree 内所有 key 大于 node key。

BST invariant 在每个 node local 地检查,但后果是 global 的。某 node key 为 x 时,整个 left subtree 深处的每个 key 都必须小于 x

定理

BST 的 inorder traversal 是 sorted

若 binary tree 满足 BST invariant,inorder traversal 会按 increasing order visit keys。

这解释了为什么 BST 题目常常问 inorder successor 或 ranked traversal。

Inorder successor

Inorder successor 是 inorder traversal 中下一个 node。Tutorial 分成两种情况:

  • 若 node 有 right subtree,successor 是 right subtree 里的 minimum node;
  • 否则,向上找 lowest ancestor,使 current node 位于那个 ancestor 的 left subtree。

第二种情况需要 parent pointer,或者能从 root 重新追踪 search path。

例题

Right-subtree case 为何成立

若 node 有 right subtree,right subtree 里每个 key 都比 node 大。当中最小 的 key 就是下一个更大的 key,所以是 inorder successor。

Deletion and replacement

BST deletion 有三种情况:

  • 删 leaf:直接移除;
  • 删只有一个 child 的 node:把 parent 接到那个 child;
  • 删有两个 children 的 node:用 left subtree maximum 或 right subtree minimum 取代,然后把 replacement 从原位置删掉。

两种 replacement strategy 只要实作小心,都可保留 BST invariant。

快速检查

BST 的 inorder traversal 有什么用?

说出 visited keys 的次序。

解答

答案

快速检查

若 BST node 有 right subtree,它的 inorder successor 在哪里?

想下一个更大的 key。

解答

答案

练习

  1. 解释 preorder plus inorder 为何可以 reconstruct distinct-key binary tree。
  2. 列出找 inorder successor 的两种情况。
  3. 解释用 right-subtree minimum 取代 two-child deleted node 为何保留 BST invariant。

解答

引导解答

本单元重点词汇