题目解析
问题描述
小蓝构造了一棵特殊的红黑树,构造规则如下:
- 根结点:红色结点
- 红色结点的子结点:
- 左子结点:红色
- 右子结点:黑色
- 黑色结点的子结点:
- 左子结点:黑色
- 右子结点:红色
树的前几层形态示意图如下:
R(1,1) / \ R(2,1) B(2,2)
/ \ / \
R(3,1) B(3,2) B(3,3) R(3,4)
我们需要判断第 n 行(从上往下数)第 k 个(从左往右数)结点的颜色是红色 (RED) 还是黑色 (BLACK)。
算法思路
关键观察
观察这棵树的规律:
- 根结点:第 1 行第 1 个,红色
- 颜色变化规律:
- 每个红色结点的左子结点是红色,右子结点是黑色
- 每个黑色结点的左子结点是黑色,右子结点是红色
- 行内规律:
- 第 n 行有 2^(n-1) 个结点
- 相邻结点的颜色交替变化
- 数学规律:
- 观察前几行的颜色:
- 第 1 行:R
- 第 2 行:R B
- 第 3 行:R B B R
- 第 4 行:R B B R B R R B
- 这实际上是 Thue-Morse 序列 的变体
- 可以通过二进制位的奇偶性判断
- 观察前几行的颜色:
计算方法
第 n 行第 k 个结点的颜色可以通过以下方式判断:
- 将 k-1 转换为二进制
- 计算二进制表示中 1 的个数
- 如果 1 的个数是偶数,则为红色 (RED)
- 如果 1 的个数是奇数,则为黑色 (BLACK)
证明:


