Interview_C++_day13

红黑树

面试常问:什么是红黑树?

wiki红黑树

红黑树性质

  1. 节点一定是红色或黑色。
  2. 根节点是黑色。
  3. 每个叶子节点都是黑色的空节点(\(NIL\))。
  4. 每个红色节点的两个子节点都是黑色。
  5. 从任一节点到其每个叶子节点的所有路径上都包含相同的黑色节点数。

这些性质强制了红黑树从根到叶子的最长路径不会超过最短路径的两倍。性质 \(4\) 导致了路径不能有两个相连的红色节点,最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。因为根据性质 \(5\) 所有最长的路径都有相同数目的黑色节点,这就表明了没有路径能多于任何其他路径的两倍长。

红黑树的扩展

可以给每个阶段加上 \(size\) 域,表示以节点 \(x\) 为根的子树的节点数。

\[size[x] = size[x->left]+size[x->right]+1 \]

通过 \(size\) 就可以获得比 \(x\) 小的节点数目和第 \(x\) 小的节点。

posted @ 2020-02-20 19:15  Jiaaaaaaaqi  阅读(87)  评论(0编辑  收藏  举报