Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46

PrintTree рекурсия

22.08.2018, 08:54. Показов 5247. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята я написала два класса как в новом классе где все выводит написать рекурсию PrintTree чтобы она выводила все элементы пробежавшись по ним.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package tree;
 
class Tree<T> {
 
    private Node<T> root = null;
    
    public Tree(T data) {
        root = new Node(data);
    }
    
    public Node getRoot() {
        return root;
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package tree;
 
import java.util.ArrayList;
import java.util.List;
 
public class Node<T> {
 
    private T data = null;
    private List<Node> children = new ArrayList<>();
    private Node parent = null;
 
    public Node(T data) {
        this.data = data;
    }
 
    public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }
 
    public List<Node> getChildren() {
        return children;
    }
 
    public Node getParent() {
        return parent;
    }
 
    
    public T getData() {
        return data;
    }
 
    public void setData(T data) {
        this.data = data;
    }
 
}
Добавлено через 1 час 15 минут
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2018, 08:54
Ответы с готовыми решениями:

Рекурсия. Рекурсия с мемоизацией. (полная версия в печатном варианте, работа со словами и строками)
Прошу помочь, может было у кого похожее задание, пока выгружу и продолжу выполнять. Буду благодарен любой помощи. Входной текст состоит...

Рекурсия. Рекурсия с мемоизацией.
Добрый день. Задача такова: У нас есть массив для длины строки (пусть будет M=20). У нас есть некие длины слов (колличество не важно пусть...

Рекурсия. Рекурсия с мемоизацией
Добрый день. Задача такова: У нас есть массив для длины строки (пусть будет M=20). У нас есть некие длины слов (колличество не важно пусть...

56
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 13:10
Студворк — интернет-сервис помощи студентам
Метод дописать))
Сейчас попробую.

Добавлено через 5 минут
Ну вообще, я тут подебагал код
Хотя и без этого видно, что
Java
1
2
3
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
они живут сами по себе, поэтому printCatalog() ничего не сделает, т.к. он использует только rootFloder, в котором ничего нет
1
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 13:14  [ТС]
ManyGames, как можно исправить чтобы printCatalog читал( бро можешь помочь дописать код((
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 13:20
Вывод такой должен быть?

RootFolder
Video
Terminator
Die Hard
Rocky
Music
Eminem
Picture
Picasso
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 13:22  [ТС]
ManyGames, да
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 13:24
Тогда я всё исправил. Держи:

TreePrint.java:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tree;
 
import java.util.*;
 
public class TreePrint {
 
    public static void main(String[] args) {
 
        Tree<String> rootFolder = new Tree<>("RootFolder");
 
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
 
        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        picture.addChild("Picasso");
 
        rootFolder.addToRootFloder(video, music, picture); //добавдяем в корень дерева
 
        printCatalog(rootFolder);
 
    }
 
    private static <T> void printCatalog(Tree<T> rootFolder) {
 
        printNode(rootFolder.getRoot());
        ArrayList<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
 
    }
 
    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
 
    }
 
    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());
 
    }
}


Tree.java:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tree;
 
import java.util.*;
 
class Tree<T> {
 
    private Node<T> root = null;
 
    private ArrayList<Node<T>> children = new ArrayList<>(); //Лист детей, которые исходят из корня
 
    public Tree(T data) {
        root = new Node(data);
    }
 
    public Node getRoot() {
        return root;
    }
 
    ArrayList<Node<T>> iterate(){
        ArrayList<Node<T>> res = new ArrayList<>();
        for(Node<T> x: children){
            res.add(x);
        }
        return res;
    }
 
    public void addToRootFloder(Node<T>...childrens){ //новый метод, который добавляет объекты типа Node<T> сюда
        for(Node<T> x:childrens){
            children.add(x);
        }
    }
}


Node.java:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tree;
 
import java.util.ArrayList;
import java.util.List;
 
public class Node<T> {
 
    private T data = null;
    private List<Node<T>> children = new ArrayList<>();
    private Node parent = null;
 
    public Node(T data) {
        this.data = data;
    }
 
    public void addChild(T data) {
        Node<T> node = new Node<>(data);
        node.parent = this;
        children.add(node);
    }
    public List<Node<T>> iterate() {
        return children;
    }
 
 
    public void remove(T data) {
        Node<T> node = new Node<>(data);
        node.parent = this;
        children.remove(node);
    }
 
    public List<Node<T>> getChildren() {
        return children;
    }
 
    public Node getParent() {
        return parent;
    }
 
 
    public T getData() {
        return data;
    }
 
    public void setData(T data) {
        this.data = data;
    }
 
}
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 13:29  [ТС]
Спасибо большое)
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 13:32
Цитата Сообщение от Azrael23 Посмотреть сообщение
нужно чтобы в классе Node были все функции
я их и не трогал
просто добавил метод, добавляющий всех детей в корень. А потом методом iterator() создаю лист, в котором они хранятся, а далее просто вывожу их

Добавлено через 1 минуту
Вообще, я могу написать по фасту свой вариант дерева, если хочешь
может мой варик будет удобнее
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 13:48  [ТС]
Братан) а как сделать так чтобы Addchild возвращал узел. Допустим мы же создали Rootfolder и от него пошли видео, музыка, картины. В Видео добавили Терминатор (но почему от терминатор не может дальше дать узлы) например Терминатор - Шварцнегер, Т-800, Сара Коннер и так далее. Как сделать так чтобы можно было бесконечно добавлять узлы.

Добавлено через 1 минуту
ManyGames, чтобы дерево было с бесконечными узлами))
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 13:54
Так написать свою реализацию?
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 13:57  [ТС]
ManyGames, можете в моем коде реализовать это пожалуйста

Добавлено через 1 минуту
ManyGames, допустим в моем коде который ты помог написать только до терминатора можно добавлять узлы, а как сделать так чтобы терминатор мог добавить узлы и там были Сара Коннер, Щварцнегер, т-800 и потом дальше можно было и Саре Коннер тоже добавить узлы и тд (чтобы бесконечно как наследование)
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 14:00
Если разберусь, что где
то возможно)

Добавлено через 2 минуты
Цитата Сообщение от Azrael23 Посмотреть сообщение
допустим в моем коде который ты помог написать только до терминатора можно добавлять узлы, а как сделать так чтобы терминатор мог добавить узлы и там были Сара Коннер, Щварцнегер, т-800 и потом дальше можно было и Саре Коннер тоже добавить узлы и тд (чтобы бесконечно как наследование)
Да, я понял
но надо думать, как такое можно реализовать в вашей структуре
Но (3 раз говорю уже), знаю как можно это проще реализовать
При той структуре, которую я могу реализовать, результат такой же будет
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 14:12  [ТС]
ManyGames, просто мне сказали чтобы код не изменял в Node

Добавлено через 1 минуту
ManyGames,я делал по своему все работала, просто человек который дал это задание сказал чтобы проект не изменял и все в нем делал

Добавлено через 53 секунды
ManyGames, и без использования rootFolder.addToRootFloder(video, music, picture);
и
Java
1
2
3
public void addToRootFloder(Node<T>...childrens){ 
        for(Node<T> x:childrens){
            children.add(x);
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 14:16
Интересно, этот человек сам понимает, что такая структура данных неэффективна ?)
Да мне вообще это не очень нравится
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 14:19  [ТС]
ManyGames, не знаю(
вот я ему уже все показал готовый код только другой, он сказал не подходит. А вообще можно то что я написал реализовать в этом коде?

Добавлено через 1 минуту
ManyGames, сказали что надо addChild кажется изменить, или я не так понял. Но сказал чтобы узлы мог бесконечно добавлять
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 14:19
Цитата Сообщение от Azrael23 Посмотреть сообщение
А вообще можно что то я написал реализовать в этом коде?
Если подумать, то конечно)
Счас что-нибудь придумаю
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 14:20  [ТС]
ManyGames, спасибо я вот тоже экспериментирую и думаю)
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 14:24
Не факт что я помогу
Заказчик странный какой-то

Добавлено через 1 минуту
Спроси, обязательно работать именно в этих класса? Или можно написать свою, более эффективную структуру?
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 14:26  [ТС]
ManyGames, можно использовать новую структуру, не изменяя почти мой проект?
0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
22.08.2018, 14:32
Цитата Сообщение от Azrael23 Посмотреть сообщение
можно использовать новую структуру, не изменяя почти мой проект?
Ну, ваш проект - это и есть структура данных. Я имею ввиду, что можно реализовать дерево так, чтобы с ним было максимально удобно обращаться, при этом затраты по памяти и времени были минимальны. И, мне кажется, тому человеку, который попросил так сделать, было приятнее видеть методы, типа таких:
Java
1
2
3
4
5
tree.add();
tree.add(int v); //v - номер вершины, для удобства 
tree.get(int v);
tree.delete(int v);
tree.set(int v, T value);
Лично мне кажется, что код с такими методами намного лучше читается. При этом типовая безопасность была бы максимальна, если создать единое дерево с одним типом данных. Не находите?
0
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 46
22.08.2018, 14:35  [ТС]
ManyGames, я писал такой код добавлял set и тд. Он сказал что не подходит((

Добавлено через 1 минуту
ManyGames, а вообще в моем никак не реализовать ту задачу( может дело в addchild (он просто попросил чтобы addchild возвращал узел))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2018, 14:35

Рекурсия
Я наверно сейчас покажусь тупым, но можете словесно объяснить, что нужно сделать в задаче &quot;Напишите программу, печатающую десятичную...

JS: Рекурсия
function expo( num, ex ) { if( ex === 0 ) { return true; } else { return num * expo( num, --ex ); } } console.log( expo( 2, 3...

Рекурсия
Есть такой код. В нем рисуется что то вроде линейки. Данный код предназначен для иллюстрации работы рекурсии. Может мне кто нибудь...

Рекурсия
Что это такое, я знаю, могу написать рекурсивную функцию по корягам, матрицам, определителям, системам уравнений. Но хотелось бы пример...

Рекурсия
Требуется помощь в решении задачи. ПОЖАЛУЙСТА ПОМОГИТЕ! :cofee2:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru