gpt4 book ai didi

java - 作业: Java Binary Search tree. 编辑特定节点

转载 作者:行者123 更新时间:2023-12-01 04:47:40 25 4
gpt4 key购买 nike

我需要有关二叉搜索树的帮助。以下是节点和 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,并使用它作为我的二叉搜索树中的键。我的问题是,使用此代码(或稍作修改的版本),如何更新给定 key 的特定节点信息?

例如。如果该人投票给候选人 4),我如何更新候选人 4 的投票信息?

我见过一些 find 方法,但我不知道应该在哪个节点上调用它。

任何帮助将不胜感激。

最佳答案

您只需向 Node 类添加两个属性即可存储您需要的额外信息。所以你的 Node 类看起来有点像这样:

public class Node {

private int key;
private Node parent;
private Node leftChild;
private Node rightChild;

public string candidateName;
public int votes;

// .. other properties and methods
}

当您获得对候选人 4 的投票时,遍历树以查找键为 4 的节点,然后执行 node.votes++

在伪代码中,它看起来像这样:

Node node = root;

while (node.key != 4) {
// implement your tree traversal algorithm here
}

// when you reach here, node is the candidate you were searching
// for, or null if not found

if (node != null) {
node.votes++;
}

请务必在 Node 构造函数中将 votes 初始化为 0。

关于java - 作业: Java Binary Search tree. 编辑特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com