BinaryTree 好像不认识根节点

问题描述 投票:0回答:0

我没有从 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 方法中不允许它。我需要知道一切是如何连接的。

binary-tree nodes root
© www.soinside.com 2019 - 2024. All rights reserved.