我已经创建了一个二叉搜索树,并且坚持如何从我的树中删除节点。我的代码当前如下所示:
public class Node
{
public int value;
public int id;
public Node left, right;
public Node(int identifier, int v)
{
id = identifier;
value = v;
left = right = null;
}
}
public class BinaryTree
{
public static Node head;
public virtual Node insert(Node node,int id, int value)
{
if (node == null)
{
return (new Node(id, value));
}
else
{
if (value <= node.value)
{
node.left = insert(node.left, id, value);
}
else
{
node.right = insert(node.right, id, value);
}
return node;
}
}
public virtual int maxvalue(Node node)
{
Node current = node;
while (current.right != null)
{
current = current.right;
}
return (current.id);
}
public static void Main(string[] args)
{
BinaryTree bt = new BinaryTree();
Node root = null;
root = bt.insert(root, 4, 5);
root = bt.insert(root, 9, 6);
root = bt.insert(root, 16, 3);
Console.WriteLine(bt.maxvalue(root));
root = bt.insert(root, 12, 8);
Console.WriteLine(bt.maxvalue(root));
Console.WriteLine(bt.maxvalue(root));
}
}
我想要做的是,每当我打印出具有最高值的节点的ID时,我都希望从BST中删除该节点。但是,我不知道如何实现此功能,因此,如果有人知道如何,我将不胜感激。
答案 0 :(得分:0)
仅在您关心的唯一操作是insert
和remove max
(称为优先级队列)的情况下,您可能会对考虑使用max-heap
感兴趣(请参阅{{3 }})的数据结构。
在某些情况下,如Aleks所建议的那样,可以使用OrderedDictionary
,但是它不允许重复的密钥,因此您将需要很多摆弄才能使其适应您的问题。