Как мне ссылаться на метод для добавления в двоичное дерево? - PullRequest
0 голосов
/ 06 апреля 2019

Мне поручено построить BinaryTree, представляющий азбуку Морзе.Он разветвляется слева от каждой точки и справа от каждой черты.

Однако я не могу понять, почему мой метод добавления узла, похоже, не работает с объектом BinaryTree.IntelliJ говорит, что он «не может разрешить метод».

Я уверен, что BinaryTree не является проблемой, потому что мой инструктор дал мне подробные инструкции о том, как написать класс.Скорее, я подозреваю, что, возможно, я ссылаюсь здесь не на ту вещь.Я уже убедился, что вводимые параметры не являются проблемой.

 public static MorseCodeTree<Character> readMorseCodeTree()
 {
    MorseCodeTree<Character> morse = new MorseCodeTree<Character>();
    Node<Character> newNode = new Node<Character>(null);
    morse.addNode(newNode, letter, position);

    private Node<Character> addNode(Node<Character> currentNode, char data, String morseCode)
    {
    if (currentNode == null)
    {
        currentNode = new Node(null);
    }

    if (morseCode.charAt(0) == '*')
    {
        currentNode = addNode(currentNode.left, data, morseCode.substring(1));
    }
    else if (morseCode.charAt(0) == '-')
    {
        currentNode = addNode(currentNode.right, data, morseCode.substring(1));
    }
    else
    {
        currentNode.data = data;
    }
    return currentNode;
}

Класс BinaryTree:

import java.io.Serializable;import java.util.Scanner;

открытый класс BinaryTree реализует Сериализуемый {

//implement Node class
protected static class Node<E> implements Serializable
{
    protected E data;
    protected Node<E> left;
    protected Node<E> right;

    public Node (E data)
    {
        this.data = data;
        this.left = null;
        this.right = null;
    }

    public String toString()
    {
        return data.toString();
    }
}

защищенный корневой узел;

public BinaryTree()
{
    root = null;
}

protected BinaryTree(Node<E> root)
{
    this.root = root;
}

public BinaryTree(E data, BinaryTree<E> leftTree, BinaryTree<E> rightTree)
{
    root = new Node<E>(data);
    if (leftTree != null)
    {
        root.left = leftTree.root;
    }
    else
    {
        root.left = null;
    }
    if (rightTree != null)
    {
        root.right = rightTree.root;
    }
    else
    {
        root.right = null;
    }
}

public BinaryTree<E> getLeftSubtree()
{
    if (root != null && root.left != null)
    {
        return new BinaryTree<E>(root.left);
    }
    else
    {
        return null;
    }
}

public BinaryTree<E> getRightSubtree()
{
    if (root != null && root.right != null)
    {
        return new BinaryTree<E>(root.right);
    }
    else
    {
        return null;
    }
}

public boolean isLeaf()
{
    return (root.left == null && root.right == null);
}

public String toString()
{
    StringBuilder sb = new StringBuilder();
    preOrderTraverse(root, 1, sb);
    return sb.toString();
}

private void preOrderTraverse(Node<E> node, int depth, StringBuilder sb)
{
    for (int i = 1; i < depth; i++)
    {
        sb.append(" ");
    }
    if (node == null)
    {
        sb.append("null\n");
    }
    else
    {
        sb.append(node.toString() + "\n");
        preOrderTraverse(node.left, depth + 1, sb);
        preOrderTraverse(node.right, depth + 1, sb);
    }
}

public static BinaryTree<String> readBinaryTree(Scanner scan)
{
    String data = scan.next();
    if (data.equals("null"))
    {
        return null;
    }
    else
    {
        BinaryTree<String> leftTree = readBinaryTree(scan);
        BinaryTree<String> rightTree = readBinaryTree(scan);
        return new BinaryTree<String>(data, leftTree, rightTree);
    }
}

}

1 Ответ

0 голосов
/ 06 апреля 2019

Вы объявляете метод addNode(...) в readMorseCodeTree(), поэтому он не входит в сферу действия класса.Последний метод должен выглядеть следующим образом:

 public static BinaryTree<Character> readMorseCodeTree()
 {
    BinaryTree morse = new MorseCodeTree();
    Node<Character> newNode = new Node<Character>(null);
    morse.addNode(newNode, letter, position);
 }
...