代码之家  ›  专栏  ›  技术社区  ›  Kap

建造树状结构

  •  0
  • Kap  · 技术社区  · 17 年前

    我刚刚发布了以下问题,但我犯了一个错误。我想要的不是如何使用Eclipse,而是如何构建树状结构。一个元素可以有多个子元素。 让我看看如何建造这棵树;它实际上不是一棵树,而是构建结构,如我下面所示。谢谢

    我的申请有这个问题,需要帮助。我从服务器获取了此表单中的数据

    食品、苹果、水果、种子等。。

    桌椅、钢笔、学校等。。

    食品:芒果、西瓜等。。

    从左边读,我想把它改成eg;在第一排,,

    苹果的主食

    种子的果亲本

    如果有更多的数据等等。。我将使用循环遍历服务器中的上述数据;例子:::

    +Food
        Apple
           Fruit
               Seed
                etc..
    
    +Table
          Chair
              Pen
                 School
                  etc..
    

    在上述代码中,“食品”和“餐桌”属于同一级别。我的问题是如何开始。我在谷歌上搜索了一整天,但找不到我真正理解的东西。例如,我怎样才能让“食物”成为父母,让苹果成为自己的孩子,然后让水果成为苹果的孩子等等。告诉我如何建造这棵树。

    我需要你的帮助。

    谢谢

    3 回复  |  直到 5 年前
        1
  •  1
  •   KitsuneYMG    17 年前

    您可以尝试使用javax.swing.tree.DefaultMutableTreeNode类。虽然它在swing包中,但它不包含任何图形代码。

        2
  •  1
  •   Adamski    17 年前

    public interface Node {
      String getName();
    
      void addChild(Node node);
    
      List<? extends Node> getChildren();
    }
    
    public class NodeImpl implements Node {
      private final String name;
      private final List<Node> nodes;
    
      public NodeImpl(String name) {
        this.name = name;
        this.nodes = new LinkedList<Node>();
      }
    
      public String getName() {
        return name;
      }
    
      public void addChild(Node node) {
        nodes.add(node);
      }
    
      public List<? extends Node> getChildren() {
        return Collections.unmodifiableList(nodes);
      }
    }
    

    一个示例用法是:

    Node root = new Node("Root"); // Create root node.
    Node food = new Node("Food"); // Create level 1 child nodes.
    Node table = new Node("Table");
    
    root.addChild(foo); // Add level 1 child nodes to root.
    root.addChild(table);
    
    Node apple = new Node("Apple"); // Create and add other child nodes.
    food.addChild(apple); // etc.
    
        3
  •  0
  •   AlbertoPL    17 年前

    创建一个名为Node的类,并使Node具有节点的ArrayList和包含父节点的变量。像这样的:

    class Node {
    
    private List<Node> children; 
    private Node parent;
    
    public Node() {
        children = new ArrayList<Node>(); 
    }
    //Constructors, accessors, mutators, etc.
    
    }
    

    这是迄今为止最简单的方法。您可以将节点变成一个抽象类,然后让椅子、桌子、学校等都扩展节点。

    public class School extends Node {
    
        public School() {
            super();
        }
    
        public void addChild(Node node) {
            children.add(node);       
        }
    
        public void setParent(Node node) {
            parent = node;
        }
    }
    

    编辑: 我添加了一些示例方法,向您展示了添加子项或设置父项所需的操作。在其他一些类中,您可以创建School、Desk等对象,然后创建addChild和setParent方法,以便向节点添加子节点或设置节点的父节点。