我目前正在开发一个将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
任何想法如何解决这个问题?