移动BST的子树

时间:2017-06-03 13:16:57

标签: arrays recursion binary-search-tree

我目前正在开发一个将BST的子树向上移动一级的功能。 BST保存在一个数组中,树的根在索引0处,i的左子在2i + 1,右子在2i + 2,因此一个。 我目前的伪代码方法是:

shiftUp(int from, int to) {
    if (!existsNode(from))
        return
    tree[to] = tree[from]
    tree[from] = NIL
    shiftUp(leftChild(from), leftChild(to))
    shiftUp(rightChild(from), rightChild(to))
}

但这不能正常工作,例如如果我有这样的BST(位置0的节点 a ,位置1的节点 b )并调用shiftUp(1,0)来移动子树 b 到节点 a 的位置,然后节点 f 移动到节点 d 的位置,节点 d < / strong>被覆盖并丢失。

       a
      /
     b  
   /  \
  c    d
 / \
e   f

任何想法如何解决这个问题?

0 个答案:

没有答案