Java 把树从下往上填满

Java 把树从下往上填满,java,tree,Java,Tree,基本上,我需要做的是从一个包含对象的未排序列表中形成一个树结构。需要根据列表中对象的parentId属性填充此树。因此,如果列表中的对象具有parentid=0,则它是根。如果它具有parentid=1,则它是具有id=1的对象的子对象。在“填充树”下面是一个问题。现在它是静态填充的,但是我需要一种动态的方式来填充树。希望有人能给我一些建议。我已抽象出我的问题,并编写了以下代码: public class Node { private int id,parentid; privat

基本上,我需要做的是从一个包含对象的未排序列表中形成一个树结构。需要根据列表中对象的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.*;
导入javax.swing.tree.DefaultMutableTreeNode;
导入java.awt.*;
导入java.util.ArrayList;
导入java.util.Collection;
公共类NodeTreeSample{
公共静态void main(字符串参数[]){
JFrame=新的JFrame(“树”);
//包含对象的未排序列表
集合树列表=新的ArrayList();
添加(新节点(1,“根节点”,0));
添加(新节点(2,“id为1的节点的子节点”,1));
添加(新节点(3,“id为1的节点的子节点”,1));
添加(新节点(4,“id为2的节点的子节点”,2));
添加(新节点(5,“id为2的节点的子节点”,2));
DefaultMutableTreeNode根=新的DefaultMutableTreeNode(“根”);
//填满树
for(节点n:树列表){
如果(n.getParentid()==0){
root=新的DefaultMutableTreeNode(n.getText());
}
如果(n.getParentid()==1){
add(新的DefaultMutableTreeNode(n.getText());
}
如果(n.getParentid()==2){
}
}
JTree树=新的JTree(根);
JScrollPane scrollPane=新的JScrollPane(树);
frame.getContentPane().add(滚动窗格,BorderLayout.CENTER);
框架。设置尺寸(300150);
frame.setVisible(true);
}
}

这不是二叉树或非常复杂的树,因此您不需要“动态解决方案”,我猜您不是指动态编程?无论如何,您需要的是对树进行深度优先搜索以插入新节点,因为这不是一个非常复杂的树,您需要拆分节点。

感谢您的快速回复。所以,即使树列表中有很多对象,我也可以使用deph first搜索来填充树?我的意思是,填充树下的代码现在不是动态的,因为我对每个parentid使用了if结构,在我的应用程序中有很多parentid。这是一个关于递归和深度优先搜索的好教程,但它是用php我最喜欢的语言编写的:
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);
    }
}