Заполнение дерева снизу вверх - PullRequest
0 голосов
/ 16 марта 2011

По сути, мне нужно сформировать древовидную структуру из несортированного списка с объектами. Это дерево должно быть заполнено на основе атрибута parentId объектов в списке. Таким образом, если объект в списке имеет parentid=0, это корень. Если он имеет parentid=1, то он является потомком объекта с id =1. В разделе «Заполнение дерева» проблема. Теперь он статически заполнен, но мне нужен динамический способ заполнить дерево. Надеюсь, кто-нибудь может дать мне несколько советов. Я абстрагировал свою проблему и сделал следующий код:

public class Node {
   private int id,parentid;
    private String text;

    public int getParentid() {
        return parentid;
    }

    public void setParentid(int parentid) {
        this.parentid = parentid;
    }

    Node(int id , String s,int pid){
        setId(id);
        setParentid(pid);
        setText(s);
    }

    public int getNummer() {
        return id;
    }

    public void setId(int nummer) {
        this.id = nummer;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;

public class NodeTreeSample {

    public static void main(String args[]) {

        JFrame frame = new JFrame("Tree");

        //The unsorted list with the objects
        Collection<Node> treeList = new ArrayList<Node>();
        treeList.add(new Node(1,"Rootnode",0));
        treeList.add(new Node(2,"Child of node with id 1",1));
        treeList.add(new Node(3, "Child of node with id 1", 1));
        treeList.add(new Node(4, "Child of node with id 2", 2));
        treeList.add(new Node(5, "Child of node with id 2", 2));

        DefaultMutableTreeNode root=new DefaultMutableTreeNode("Root");

        //Filling the tree
        for(Node n:treeList){
            if(n.getParentid()==0){
               root = new DefaultMutableTreeNode(n.getText());
            }
            if(n.getParentid()==1){
                root.add(new DefaultMutableTreeNode(n.getText()));
            }
            if(n.getParentid()==2){

            }
        }
        JTree tree = new JTree(root);
        JScrollPane scrollPane = new JScrollPane(tree);
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300, 150);
        frame.setVisible(true);
    }
}

1 Ответ

1 голос
/ 16 марта 2011

Это не бинарное дерево или очень сложное дерево, поэтому вам не нужно «динамическое решение», и, я думаю, вы не имеете в виду динамическое программирование?В любом случае вам нужен поиск дерева в глубину для вставки нового узла, потому что это не очень сложное дерево, в котором вам нужно разбить узел.

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