Java 节点树<;T>;解释

Java 节点树<;T>;解释,java,tree,Java,Tree,不知道我是否可以根据网站的规则来做这件事。。。但我会抓住机会。。。请容忍我,我只是个学生…:-) 我有一个大学作业。。。我很难理解班级应该做什么。。。我曾三次去见我的老师,但他给我的答案毫无帮助。无论如何,作业的细节如下 创建一个名为Tree的类,作为节点的容器。树类应该支持以下方法 public void add(节点父节点,节点子节点){}向父节点添加新的子节点 public void removeChild(Nodeparent,Node child){}从父节点删除子节点 公共节点get

不知道我是否可以根据网站的规则来做这件事。。。但我会抓住机会。。。请容忍我,我只是个学生…:-)

我有一个大学作业。。。我很难理解班级应该做什么。。。我曾三次去见我的老师,但他给我的答案毫无帮助。无论如何,作业的细节如下

创建一个名为
Tree
的类,作为节点的容器。树类应该支持以下方法

public void add(节点父节点,节点子节点){}向父节点添加新的子节点

public void removeChild(Nodeparent,Node child){}从父节点删除子节点

公共节点getRootNode(){}--返回树的根

public void setRoot(Node root){}--设置树的根节点

公共布尔包含(T数据){}--在树中搜索给定类型

public void dfs(节点子节点){}--对树执行深度优先搜索并输出每个节点(缩进)

公共void bfs(节点子节点){}--对树执行宽度优先搜索,并输出每个节点(缩进)

  • 树类应该参数化以处理泛型类型T,允许字符串、文件等的树。。。待创建,例如
    Tree Tree=new Tree()

  • tree类应使用邻接列表实现树结构,并按以下方式定义:
    Map tree=new HashMap您可以将映射用于以下用途:

    hashmap的键是给定的节点,hashmap的值是给定节点的子节点

    public class Tree<T> {
        private Node<T> rootNode;
        private HashMap<Node<T>, List<Node<T>> tree;
    
        //and then some kind of function to go through the tree.
        public void expandNode(Node<T> node) {
            if (tree.get(node) == null) {
                System.out.println(node);
                return;
            }
            for(Node<T> n : tree.get(node)) {
                System.out.println(node);
                expandNode(n);
            }
        }
    }
    
    公共类树{
    专用节点rootNode;
    
    private HashMap看看列表中的2个点,我猜第1点是最让你困惑的

    树本身可以参数化。树类上的类型参数可以在用于创建节点的内部类中使用。也就是说,为了进行赋值,节点类可能应该在树类中,以便它可以使用给定给树类的T类型参数


    这样,树可以存储任何内容(字符串、文件、双精度等).Node类只是作为一种很好的方式来存储任何类型的T对象。

    这有点奇怪。如果我这样做,并且赋值没有说明其他情况,我可能根本不会编写树类;我只会将Node用作递归数据结构,并让树的根节点代表整个树

    因为它看起来不像是应该这样做的,所以您可以将
    Tree
    创建为一个包装类,该类具有对单个
    节点
    对象的引用。您可以将所需方法的逻辑放在任何一个类中

    代码的开头可以如下所示:

    public class Tree<T> {
    
        private Node<T> root;
    
        public Tree(Node<T> root) {
            this.root = root;
        }
    
    }
    
    公共类树{
    私有节点根;
    公共树(节点根){
    this.root=根;
    }
    }
    
    “裸体”和你在一起?我一直在穿衣服-这是“忍受我。”一个有用的区别是:你是在处理一种树,还是一种树?我猜是前者,但使用邻接列表的要求暗示了后者。我认为你提供的第一个链接看起来非常接近我们所讲授的内容……嗯,在我的节点类中,我制作了一个返回子节点的方法在一个数组中…那么我应该做什么,把节点作为键,把节点的子节点作为数组…?这样想,哈希映射就是整个树,你可以为自己保留一个对根节点的引用,然后它是这样工作的,有一个给定的节点,你调用哈希映射的get方法来获取该节点的子节点,这样你就可以迭代了在子节点上,使用相同的映射继续检索节点的子节点,当get方法返回null时,就有叶节点。另外一个细节是,为了让它工作,你应该在你的节点类中实现equals和hashcode方法。嗯……好吧,我想我会继续你给我的想法……并实现hashcode和我的节点类中的equals方法…但是根据我不知道我将在节点中存储什么类型的对象…基于什么基础我可以生成hashcode?equals方法?你可以在托管对象上调用hashcode,因为这是从对象类继承的方法你对descript中的混淆部分是正确的…:-)ion我们被要求为节点写一个单独的类…我已经写了描述清楚地说明树类应该支持我在原始帖子中写的方法…但是你能给我一个树类初始化语句的例子吗…?请…只是想让我了解一下你说的…这位先生Juan也很有道理…这正是我开始编写Tree类的方式,但后来对整个映射问题感到困惑…啊,没关系,我一直在想这个问题。我假设边应该是节点状态的一部分。它们不是。
    public class Tree<T> {
    
        private Node<T> root;
    
        public Tree(Node<T> root) {
            this.root = root;
        }
    
    }