如何为绳索构建基础二进制树结构?

时间:2013-06-15 13:37:20

标签: string data-structures binary-tree text-editor

我正在维基百科上阅读ropes。在那里,对于字符串,“Hello_my_name_is_Simon”,给出了二叉树。那个二叉树是如何形成的?一步一步的表示将有所帮助!

1 个答案:

答案 0 :(得分:0)

平衡二叉搜索树(红/黑树,展开树等)的最常见实现支持名为 join 的操作,其工作方式如下:给定两个树T 1 和T 2 其中T 1 中的所有键都小于T 2 中的相应键,并且给出的键x大于T 1 中的所有值且小于T 2 中的所有值,组合T 1 ,x和T 2 进入一棵树。对于此操作,运行时通常为O(log n),这比最初看起来更快。

尽管这些操作设计为在二进制搜索树上运行,但它们对于通用二进制树同样有效。例如,如果构建其基础二叉树为红/黑树或展开树的绳索,则可以使用 join 通过创建新的内部节点将文本连接到树的末尾,然后使用 join 操作将两个现有树(和新的内部节点)组合到一个树中。

关于这种方法的好消息是它运行得非常快(每次连接的时间为O(log n))并且它保持树平衡。坏消息是加入可能很难实现。 加入两个红/黑树的逻辑非常棘手。幸运的是,splay树对于 join 具有非常简单的逻辑,因此获得快速绳索的一个简单选择是使用splay树作为底层树结构。