0
我有一个右偏的红黑树形结构,它在给定元素总数的情况下始终是某种形状。具有序号索引的访问树
给定元素k
的大小和序数元素n
,如何编写函数来获取大小为k
的树中的第n个元素?
(size:1)
black { 1, 1 }(d:1)
+
+
(size:2)
black { 1, 1 }(d:1)
+
+ red { 2, 2 }(d:1)
+
+
(size:3)
black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+
(size:4)
black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+ red { 4, 4 }(d:1)
+
+
(size:5)
black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ red { 4, 4 }(d:2)
+ black { 3, 3 }(d:1)
+
+
+ black { 5, 5 }(d:1)
+
+
(size:6)
black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ red { 4, 4 }(d:2)
+ black { 3, 3 }(d:1)
+
+
+ black { 5, 5 }(d:1)
+
+ red { 6, 6 }(d:1)
+
+
(size:7)
black { 4, 4 }(d:3)
+ black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+
+ black { 6, 6 }(d:2)
+ black { 5, 5 }(d:1)
+
+
+ black { 7, 7 }(d:1)
+
+
(size:8)
black { 4, 4 }(d:3)
+ black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+
+ black { 6, 6 }(d:2)
+ black { 5, 5 }(d:1)
+
+
+ black { 7, 7 }(d:1)
+
+ red { 8, 8 }(d:1)
+
+
(size:9)
black { 4, 4 }(d:3)
+ black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+
+ black { 6, 6 }(d:2)
+ black { 5, 5 }(d:1)
+
+
+ red { 8, 8 }(d:2)
+ black { 7, 7 }(d:1)
+
+
+ black { 9, 9 }(d:1)
+
+
(size:10)
black { 4, 4 }(d:3)
+ black { 2, 2 }(d:2)
+ black { 1, 1 }(d:1)
+
+
+ black { 3, 3 }(d:1)
+
+
+ black { 6, 6 }(d:2)
+ black { 5, 5 }(d:1)
+
+
+ red { 8, 8 }(d:2)
+ black { 7, 7 }(d:1)
+
+
+ black { 9, 9 }(d:1)
+
+ red { 10, 10 }(d:1)
+
+
而不是存储每个节点的深度,尝试存储的大小(或左孩子的数量)。 – Bergi
只是想通了。原来你不需要存储大小(可以根据深度信息计算) –
@Bergi这只适用于红黑树。对于其他树,您必须存储节点数。 –