我没有从 BinaryTree 得到任何结果作为输出。可能有一个小错误。
public class Worker {
public String name;
public double salary;
public Worker(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
@Override
public String toString() {
return name + ": " + salary;
}
}
import org.w3c.dom.Node;
public class BinaryTree {
public Node root;
public int size;
public BinaryTree() {
root = null;
size = 0;
}
public Worker root() {
return root == null ? null : root.worker;
}
public Worker parent(Worker p) {
Node node = findNode(root, p);
return node == null || node.parent == null ?
null :
node.parent.worker;
}
public Worker left(Worker p) {
Node node = findNode(root, p);
return node == null || node.left == null ? null
:
node.left.worker;
}
public Worker right(Worker p) {
Node node = findNode(root, p);
return node == null || node.right == null ?
null :
node.right.worker;
}
public Worker setLeft(Worker p, Worker child) {
Node node = findNode(root, p);
if (node == null) {
return null;
}
if (node.left == null) {
node.left = new Node(child);
node.left.parent = node;
size++;
return child;
} else {
Worker oldChild = node.left.worker;
`enter code here` node.left.worker = child;
return oldChild;
}
}
public Worker setRight(Worker p, Worker child) {
Node node = findNode(root, p);
if (node == null) {
return null;
}
if (node.right == null) {
node.right = new Node(child);
node.right.parent = node;
size++;
return child;
} else {
Worker oldChild = node.right.worker;
node.right.worker = child;
return oldChild;
}
}
public int size() {
return size;
}
private Node findNode(Node node, Worker p) {
if (node == null) {
return null;
}
if (node.worker == p) {
return node;
}
Node left = findNode(node.left, p);
if (left != null) {
return left;
}
Node right = findNode(node.right, p);
return right;
}
private void printInOrder(Node node) {
if (node != null) {
printInOrder(node.left);
System.out.println(node.worker);
printInOrder(node.right);
}
}
public void print() {
printInOrder(root);
}
private static class Node {
private Worker worker;
private Node parent;
private Node left;
private Node right;
private Node(Worker worker) {
this.worker = worker;
this.parent = null;
this.left = null;
this.right = null;
}
}
}
public class Main {
public static void main(String[] args) {
Worker alice = new Worker("Alice", 50000);
Worker bob = new Worker("Bob", 60000);
Worker charlie = new Worker("Charlie", 70000);
Worker dave = new Worker("Dave", 80000);
Worker eve = new Worker("Eve", 90000);
BinaryTree tree = new BinaryTree();
tree.setLeft(alice, bob);
tree.setRight(alice, charlie);
tree.setLeft(bob, dave);
tree.setRight(charlie, eve);
tree.print();
}
}
有人可以向我解释这段代码中的一些逻辑吗?我收到的是不完整的帮助。我仔细阅读了一遍。工人阶级非常简单。主要是在二叉树上调用方法。但看起来传递给 print 方法的根是空的。如果我在 print 方法中将方法设置为允许 null,则在 .left 或 .right 方法中不允许它。我需要知道一切是如何连接的。