我需要编写函数,它接收一些关键x并将2-3棵树分成2 2-3棵树。在第一棵树中,存在大于x的所有节点,并且在第二树中,所有节点都小于x。我需要复杂性 O(logn)。提前感谢任何想法。
编辑 我想到在树上找到关键x。将两棵子树(如果它们存在的话更大或更小)分成两棵树,然后开始上去,每次检查我尚未检查的子树并加入其中一棵树。我的问题是所有的叶子必须处于同一水平。
答案 0 :(得分:1)
如果你从根移动到你的密钥并拆分每个节点,那么一个指向大于密钥的节点,另一个指向其余节点,然后使较大的节点成为较大树的一部分,比如说最左边的节点在它的一个等级的高点,(不要固定树,最后做)直到你到达钥匙,你将得到你的树。然后你只需要在你使用的路径上修复两棵树(注意两棵树上都存在相同的路径)。
答案 1 :(得分:0)
假设您已经在讲座中介绍了2-3-4 trees,这里有一个提示:看看是否可以对2-3棵树应用相同的插入算法。特别是,插入总是从叶子开始,然后适当地重组树。完成后,确定您获得的算法的复杂性。