Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2018, 08:12   #1
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию Tree - добавить узлы в дерево (Ребята помогите исправить код)

Я там закомментила вопрос,


Код:
/*
 * 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.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;



 
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.addChildren(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());
 
    }
}
Код:
/*
 * 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;

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;
    }
 
    
}

Код:
/*
 * 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 Node<T> addChild(T data) {
        Node<T> node = new Node<>(data);
        node.parent = this;
        children.add(node);
        
        return 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;
    }
    public void addChildren(Node<T>...childrens){ 
        for(Node<T> x:childrens){
            children.add(x);
        }
    }
    
 
}
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 08:23   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Очевидно же, добавлять не строки в потомки, а такие же ноды.
p51x вне форума Ответить с цитированием
Старый 23.08.2018, 08:24   #3
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

можете помочь исправить код, я от не смогла написать и сюда вернулась((
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 08:25   #4
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

там почти все кажется все написала правильно, где то изменить надо пожалуйста помогите( я уже все перепробывала
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 09:28   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если я правильно понял вопрос и проблему, то Вам нужно запоминать добавленный узел и далее добавлять нужное в него:

Код:
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
 
        
        Node<String> nodetemp = video.addChild("Terminator");
        nodetemp.addChild("Terminator 1");
        nodetemp.addChild("Terminator 2");
        nodetemp.addChild("Terminator 3");
        nodetemp = video.addChild("Die Hard");
        nodetemp.addChild("Die Hard 1");
        nodetemp.addChild("Die Hard 2");
        nodetemp.addChild("Die Hard 3");
        nodetemp = video.addChild("Rocky");
        nodetemp.addChild ......
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2018, 09:32   #6
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

Извините как его запустить ? без
Код:
rootFolder.addChildren(video, music, picture);
и этого кода
Код:
 ArrayList<Node<T>> iterate(){
        ArrayList<Node<T>> res = new ArrayList<>();
        for(Node<T> x: children){
            res.add(x);
        }
        return res;
    }
Код:
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");
 
        
        Node<String> nodetemp = video.addChild("Terminator");
        nodetemp.addChild("Terminator 1");
        nodetemp.addChild("Terminator 2");
        nodetemp.addChild("Terminator 3");
        nodetemp = video.addChild("Die Hard");
        nodetemp.addChild("Die Hard 1");
        nodetemp.addChild("Die Hard 2");
        nodetemp.addChild("Die Hard 3");
        nodetemp = video.addChild("Rocky");
        
        
        
 
        
 
        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());
 
    }
}
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 09:40   #7
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

Можете посмотреть
Код:
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");
 
        
        Node<String> nodetemp = video.addChild("Terminator");
        nodetemp.addChild("Terminator 1");
        nodetemp.addChild("Terminator 2");/// а как к нему добавить узлы
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 09:49   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Nastya2018 Посмотреть сообщение
Код:
nodetemp.addChild("Terminator 2");/// а как к нему добавить узлы
так же и добавить:

Код:
Node<String> nodetemp3  = nodetemp.addChild("Terminator 2");
///к нему добавить узлы
nodetemp3.addChild("Terminator 2: Edizode 1");
если к этому дочернему добавленному узлу нужно ещё добавлять, тогда
Код:
Node<String> nodetemp3  = nodetemp.addChild("Terminator 2");
///к нему добавить узлы
Node<String> nodetemp4 = nodetemp3.addChild("Terminator 2: Edizode 1");
///к нему тоже добавить узлы
nodetemp4.addChild("Part 1")
и т.д.

p.s. но, конечно, такой уродливый индусский код получается, т.к. вообще непонятно, откуда Вам нужно загружать данные.
Если делать правильно и красиво, то столько временных переменных не нужно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2018, 09:51   #9
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

извините как его запустить? не подскажите плиз хочу проверить)
Nastya2018 вне форума Ответить с цитированием
Старый 23.08.2018, 09:52   #10
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

я просто сама написала, понимаю местами ошибки( но я только учусь строить структуру данных
Nastya2018 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tree - иерархическое дерево каталогов. Идеи?! Dodge_wow Общие вопросы C/C++ 1 08.05.2012 13:24
Дерево.Удалить все узлы больше среднего арифметического Сайын Помощь студентам 0 29.11.2011 22:19
Tree View (не отображается дерево) ImmortalAlexSan Общие вопросы C/C++ 1 20.05.2011 23:04
Красно-черное дерево(RB-Tree) Mixim Общие вопросы C/C++ 1 26.12.2010 16:58