【发布时间】:2022-07-22 16:29:42
【问题描述】:
我发布这个问题只是为了好奇,这不是家庭作业。这是我的一次考试的问题,我8年前毕业了。 问题是这样的:
定义一个高效的递归算法,给bst一个正整数x,k从bst中删除包含小于k且深度不小于x的最大key的节点 不允许使用通过引用传递的全局变量或参数
我已经解决了问题,但是老师说我没有使用 bst 属性。解决办法是这样的:
Algo(T, x, k){
temp = funz(T, x, k, 0);
if(temp != NIL)
T = delete(T, temp[k]); // standard delete algo
return T;
}
Funz(T, x, k, dis){
l= NIL;
r = NIL;
if(T = NIL)
return T;
if(dis < x){
l = Funz(T->sx, x, k, dis + 1);
r = Funz(T->dx, x, k, dis + 1);
return Max(l, r); // return the maximum key nil otherwise
}
else
return Predecessor(T, k); // standard predecessor algo
}
我知道密钥必须位于树的某些区域,所以我们可以排除树的某些部分,但是深度的限制让我感到困惑。
有人可以帮忙吗?
问候
【问题讨论】:
标签: algorithm binary-search-tree