Как можно рекурсивно генерировать двоичное дерево?

основной класс: двоичное дерево

он содержит корневой узел и двоичный конструктор дерева

public class BinaryTree{
Node root;
BinaryTree (int depth){
    this.root = new Node(depth);
    root.generateTree(depth);
}

узел подкласса.

метод generateTree() определен в этом классе, но не работает.

узлы представляют ветви дерева.

generateTree возвращает двоичное дерево.

class Node{
    final int LEAF = 1;
    final int BALL = 2;
    final int CANDLE = 3;
    int depth;
    int decoration;
    String color;
    boolean on;
    Node left;
    Node right;
    Node(int depth){
        this.depth = depth;
    }
    void setLeaf(){
        decoration = LEAF;
    }
    void setBall(String color){
        color = color;
    }
    void setCandle(boolean on){
        on = on;
    }
    BinaryTree generateTree(int depth) {
        if (depth == 0) {
            return root;
        }
        else if (depth > 1) {
            if (root.right == null){
                root.right = new Node(depth-1);
                root.left = new Node(depth-1);
            }
            for (int i=0; i < depth; i++){
                Node node = new Node(depth);
                node.right = new Node(depth-1);
                node.left = new Node(depth-1);
            }
        }
          generateTree(depth - 1);

    }
}
}
2
nl ja de

1 ответы

Вместо того, чтобы возвращать BinaryTree в качестве результата, попробуйте использовать метод, который возвращает только узел:

private static Node generateTree (int depth) {
    if (depth < 0) return null;
    Node currentNode = new Node(depth);
    if (depth > 0) {
        currentNode.left = generateTree(depth-1);
        currentNode.right = generateTree(depth-1);
    }
    return currentNode;
}

EDIT:

вместо вызова метода generateTree как функции класса Node, вы должны вызвать функцию и установить ее возвращаемое значение в конструкторе.

BinaryTree (int depth) {
    this.root = generateTree(depth);
}
0
добавлено
Если это так, я обновляю сообщение, чтобы объяснить, как это сделать.
добавлено автор Kaushik Shankar, источник
спасибо за Ваш ответ. Но метод должен вернуть двоичное дерево.
добавлено автор Kai Steffes, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async