Algorithm 展开x下的子树在展开操作后是否必须平衡?
问题是:Algorithm 展开x下的子树在展开操作后是否必须平衡?,algorithm,splay-tree,Algorithm,Splay Tree,问题是: 设N个节点上的一个八叉树,并设X为T.的节点。x下的子树是否必须平衡(即,在展开操作后,以x为根的子树在展开树中的高度变为O(logn) 我花了很多时间在它上面,但是仍然很沮丧……我很感激你的回答。 < P>不。考虑绝对的最坏情况,T看起来是这样的: y \ y \ ... \ x x / y \ y / \ y y / \ y y / \ y ... \
设N个节点上的一个八叉树,并设X为T.的节点。x下的子树是否必须平衡(即,在展开操作后,以x为根的子树在展开树中的高度变为O(logn)
我花了很多时间在它上面,但是仍然很沮丧……我很感激你的回答。 < P>不。考虑绝对的最坏情况,T看起来是这样的:
y
\
y
\
...
\
x
x
/
y
\
y
/ \
y y
/ \
y y
/ \
y ...
\
y
其中y
s是任意节点。一旦展开x
,树将如下所示:
y
\
y
\
...
\
x
x
/
y
\
y
/ \
y y
/ \
y y
/ \
y ...
\
y
(同样,将y
s作为任意节点)。在这种情况下,深度仍然是O(n)
编辑:意识到我弄错了“之后”树,所以用一个更正确的例子更新我的答案。否。请参阅。遍历节点的平均深度被减半,但这并不保证生成一个平衡的树。谢谢。丹尼斯。这很有帮助。因此,在splay操作之后,t应该是这样的:x/y\y/\yy/y…哪一个是不平衡的,对吗?注释不是画树的最佳位置。我添加了“before”和“after”在我的回答中,这样我们两人都能看到。@BiWu关于那个例子,你试图在那个被拒绝的编辑中给出;用一棵更长的树再试一次;你会看到模式。谢谢~我会尝试一下。只是需要一些时间:)如果你还有其他问题,编辑别人的答案时,你自己无法理解,这不是正确的做法。你总是可以问另一个问题。