Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 展开x下的子树在展开操作后是否必须平衡?_Algorithm_Splay Tree - Fatal编程技术网

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关于那个例子,你试图在那个被拒绝的编辑中给出;用一棵更长的树再试一次;你会看到模式。谢谢~我会尝试一下。只是需要一些时间:)如果你还有其他问题,编辑别人的答案时,你自己无法理解,这不是正确的做法。你总是可以问另一个问题。