Нужна помощь в понимании этих параметров метода, используемых в конструкторе - PullRequest
0 голосов
/ 08 февраля 2019

Работа над заданием.Занятия онлайн, и я отправил электронное письмо своему профессору с тем же вопросом, но я надеюсь получить более быстрый ответ от вас, замечательные люди здесь (так как у меня есть только 2 часа в день, когда я могу работать в школе, и я наткнулся на контрольно-пропускной пункт).

Назначение - завершить код для бинарного дерева поиска, и бла-бла реализовать некоторые вещи.

Я завис на одном куске кода, который просто не могу понять.

Это фрагмент кода из предоставленного класса LinkedBinaryTree.LinkedBinaryTree использует класс BinaryTreeNode для узлов.

public class LinkedBinaryTree<T> implements BinaryTreeADT<T>, Iterable<T>
{
   protected BinaryTreeNode<T> root; 
   protected int modCount;
}

//Constructors

public LinkedBinaryTree() 
{
    root = null;
}  

public LinkedBinaryTree(T element) 
{
    root = new BinaryTreeNode<T>(element);
}

public LinkedBinaryTree(T element, LinkedBinaryTree<T> left, 
        LinkedBinaryTree<T> right) 
{
    root = new BinaryTreeNode<T>(element);
    root.setLeft(left.root);
    root.setRight(right.root);
}

Это прежде всего то, что я не смог понять.

root.setLeft (left.root);

root.setRight (right.root);

Что такое .root и как это работает.

Переменная используется в двух местах?это какая-то рекурсия / магия, с которой я еще не сталкивался?(И в настоящее время не могу понять) Если это так, я получу чтение, дайте мне знать и укажете мне правильное направление.

Я опубликую код для методов BinaryTreeNode ниже.Я не понимаю эти параметры, которые передаются.

root - переменная типа BinaryTreeNode , но при использовании она передает LinkedBinaryTree либо left или вправо в качестве параметров для метода, для которого требуется переменная типа BinaryTreeNode

public class BinaryTreeNode<T>{

    protected T element;
    protected BinaryTreeNode<T> left, right;

//Constructors

public BinaryTreeNode(T obj) 
{
    element = obj;
    left = null;
    right = null;
}

public BinaryTreeNode(T obj, LinkedBinaryTree<T> left, LinkedBinaryTree<T> right) 
{
    element = obj;
    if (left == null)
        this.left = null;
    else
        this.left = left.getRootNode();

    if (right == null)
        this.right = null;
    else
        this.right = right.getRootNode();
}

И рассматриваемые методы

public void setLeft(BinaryTreeNode<T> node)
{
    left = node;
}

public void setRight(BinaryTreeNode<T> node) 
{
    right = node;
}

1 Ответ

0 голосов
/ 08 февраля 2019

Как уже упоминалось, это двоичное дерево.

Каждый ненулевой узел имеет узел слева и справа.Иногда значения узлов равны нулю.

Как объяснено в комментариях к вопросу, вы вызываете корневую переменную типа BinaryTreeNode.Это будет иметь смысл только потому, что код написан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...