如何解决minHeap 作为二叉树
我正在尝试将堆实现为二叉树。我需要在 O(log n) 时间内执行插入和删除功能。它只需要删除最低的、最右边的节点。这是我到目前为止的 remove 函数(它是 O(n) 运行时):
public Node removeLast() {
Node k = findLastForDeletion(this.root,1,findHeightforDeletion());
if (k.parent != null && k.parent.left == k) {
k.parent.left = null;
}
else if (k.parent != null) {
k.parent.right = null;
}
return k;
}
public Node findLastForDeletion(Node n,int current,int height) {
if (current == height && n != null) {
return n;
}
else if (n == null) {
return n;
}
else {
Node k = findLastForDeletion(n.right,current + 1,height);
if (k != null) {
return k;
}
else {
return findLastForDeletion(n.left,height);
}
}
}
public int findHeightforDeletion() {
Node l = this.root;
int lCount = 0;
while (l != null) {
l = l.left;
lCount ++;
}
return lCount;
}
我的add函数和这个过程是一样的。我只需要帮助弄清楚如何在删除之前获取最后一个节点。感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。