我需要二叉搜索树的帮助。以下是节点和 BST 类:
public class Node {
private int key;
private Node parent;
private Node leftChild;
private Node rightChild;
public Node(int key, Node leftChild, Node rightChild) {
this.setKey(key);
this.setLeftChild(leftChild);
this.setRightChild(rightChild);
}
public void setKey(int key) {
this.key = key;
}
public int getKey() {
return key;
}
public void setParent(Node parent) {
this.parent = parent;
}
public Node getParent() {
return parent;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getLeftChild() {
return leftChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
public Node getRightChild() {
return rightChild;
}
}
public class BinarySearchTree {
private Node root;
public void insert(int key) {
insert(new Node(key, null, null));
}
public void insert(Node z) {
Node y = null;
Node x = root;
while (x != null) {
y = x;
if (z.getKey() < x.getKey()) {
x = x.getLeftChild();
} else {
x = x.getRightChild();
}
}
z.setParent(y);
if (y == null) {
root = z;
} else if (z.getKey() < y.getKey()) {
y.setLeftChild(z);
} else {
y.setRightChild(z);
}
}
public void preorderTraversal() {
preorderTraversal(root);
}
public void preorderTraversal(Node node) {
if (node != null) {
System.out.print(node.getKey() + " ");
preorderTraversal(node.getLeftChild());
preorderTraversal(node.getRightChild());
}
}
public void inorderTraversal() {
inorderTraversal(root);
}
private void inorderTraversal(Node node) {
if (node != null) {
inorderTraversal(node.getLeftChild());
System.out.print(node.getKey() + " ");
inorderTraversal(node.getRightChild());
}
}
public void postorderTraversal() {
postorderTraversal(root);
}
private void postorderTraversal(Node node) {
if (node != null) {
postorderTraversal(node.getLeftChild());
postorderTraversal(node.getRightChild());
System.out.print(node.getKey() + " ");
}
}
}
(取自http://www.brilliantsheep.com/java-implementation-of-binary-search-tree-insert-and-traversal-methods/)这是一个相对简单的实现。但是,我需要在每个节点中存储额外的信息该节点必须包含选举的候选人和候选人的票数。有很多关于这项任务的抱怨(以及为什么必须使用 BST),但请不要讨论这个问题。
我将我的候选人编号为 1-20,并将其用作我的二进制搜索树中的键。我的问题是,使用此代码(或稍作修改的版本),如何根据其密钥更新特定节点信息?
例如。如果该人投票给候选人 4),我如何更新候选人 4 的投票信息?
我见过一些 find 方法,但我不知道应该在哪个节点上调用它。
任何帮助将不胜感激。