猿问

两棵树中的相等方法

伙计们,我创造了两棵树。我写了一个方法,但它不能正常工作。我的方法不能递归地工作,只打印“false”。一般来说,我需要递归遍历一棵树的元素,如果两棵树相似,那么它应该输出 - “true”。如果两个 rees 不相似,那么它应该输出 - false。请帮我在我的树中编写代码 eqauls 方法


我的代码:


public class TreePrint {


    public static void main(String[] args) {


        Tree<String> rootFolder = new Tree<>("RootFolder");


        Node<String> video = rootFolder.addChild("Video");

        Node<String> music = rootFolder.addChild("Music");

        Node<String> picture = rootFolder.addChild("Picture");


        video.addChild("Terminator");

        video.addChild("Die Hard");

        video.addChild("Rocky");

        music.addChild("Eminem");

        Node<String> picture01 = picture.addChild("Picasso");

        picture01.addChild("Do Vinci");

        Node<String> picture02 = picture01.addChild("NN");

        picture02.addChild("Cartoon");

        picture02.addChild("Comics");


         Tree2<String> rootFolder1 = new Tree2<>("RootFolder");

 printTree(rootFolder);

        printTree(rootFolder1);



        boolean b1 = rootFolder.contains("P0");

        //System.out.println(b1);

        boolean b2 = rootFolder1.contains("Eminem");

        //System.out.println(b2);


        System.out.println(rootFolder.equals(rootFolder1));


    }


    private static <T> void printTree(Node<T> node) {

        printTree(node, 0);

    }


    private static <T> void printTree(Node<T> node, int level) {

        printNode(node, level);

        if (node.getChildren() != null) {

            for (Node childNode : node.getChildren()) {

                printTree(childNode, level + 1);

            }

        }

    }


    private static <T> void printNode(Node<T> kid, int level) {


        for (int i = 0; i < level; i++) {

            System.out.print("  ");

        }


        System.out.println(kid.getData());

    }

}


摇曳的蔷薇
浏览 165回答 2
2回答

DIEA

问题是这条线if&nbsp;(getClass()&nbsp;!=&nbsp;obj.getClass())&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}因为一个对象属于 Tree 类,另一个属于 Tree2

萧十郎

我不知道你为什么需要两个类Tree,Tree2但是:树点public class TreePoint {&nbsp; &nbsp; &nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tree<String> rootFolder = new Tree<>("RootFolder");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> video = rootFolder.addChild("Video");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> music = rootFolder.addChild("Music");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture = rootFolder.addChild("Picture");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.addChild("Terminator");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.addChild("Die Hard");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.addChild("Rocky");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; music.addChild("Eminem");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture01 = picture.addChild("Picasso");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture01.addChild("Do Vinci");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture02 = picture01.addChild("NN");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture02.addChild("Cartoon");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture02.addChild("Comics");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tree2<String> rootFolder1 = new Tree2<>("RootFolder");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> video1 = rootFolder1.addChild("Video");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> music1 = rootFolder1.addChild("Music");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture1 = rootFolder1.addChild("Picture");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video1.addChild("Terminator");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video1.addChild("Die Hard");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video1.addChild("Rocky");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; music1.addChild("Eminem");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture011 = picture1.addChild("Picasso");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture011.addChild("Do Vinci");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Node<String> picture021 = picture011.addChild("NN");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture021.addChild("Cartoon");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picture021.addChild("Comics");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printTree(rootFolder);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printTree(rootFolder1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(rootFolder.equals(rootFolder1));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private static <T> void printTree(Node<T> node) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printTree(node, 0);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private static <T> void printTree(Node<T> node, int level) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printNode(node, level);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (node.getChildren() != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (Node childNode : node.getChildren()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printTree(childNode, level + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private static <T> void printNode(Node<T> kid, int level) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < level; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.print("&nbsp; ");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(kid.getData());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }树import java.util.List;public class Tree<T> extends Node<T> {&nbsp; &nbsp; public Tree(T data) {&nbsp; &nbsp; &nbsp; &nbsp; super(data, null);&nbsp; &nbsp; }&nbsp; &nbsp; public boolean contains(T value) {&nbsp; &nbsp; &nbsp; &nbsp; return recurse(iterate(), value);&nbsp; &nbsp; }&nbsp; &nbsp; private boolean recurse(List<Node<T>> children, T value) {&nbsp; &nbsp; &nbsp; &nbsp; return children.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .anyMatch(item -> item.getData().equals(value) || item.iterate().size() > 0 && recurse(item.iterate(), value));&nbsp; &nbsp; }}节点&nbsp; &nbsp; import java.util.ArrayList;import java.util.List;import java.util.Objects;public class Node<T> {&nbsp; &nbsp; public T data;&nbsp; &nbsp; public final List<Node<T>> children = new ArrayList<>();&nbsp; &nbsp; public final Node<T> parent;&nbsp; &nbsp; public Node(T data, Node<T> parent) {&nbsp; &nbsp; &nbsp; &nbsp; this.data = data;&nbsp; &nbsp; &nbsp; &nbsp; this.parent = parent;&nbsp; &nbsp; }&nbsp; &nbsp; public void addChild(Node<T> node) {&nbsp; &nbsp; &nbsp; &nbsp; children.add(node);&nbsp; &nbsp; }&nbsp; &nbsp; public Node<T> addChild(T nodeData) {&nbsp; &nbsp; &nbsp; &nbsp; Node<T> newNode = new Node<T>(nodeData, this);&nbsp; &nbsp; &nbsp; &nbsp; children.add(newNode);&nbsp; &nbsp; &nbsp; &nbsp; return newNode;&nbsp; &nbsp; }&nbsp; &nbsp; public List<Node<T>> iterate() {&nbsp; &nbsp; &nbsp; &nbsp; return children;&nbsp; &nbsp; }&nbsp; &nbsp; public void remove(Node<T> node) {&nbsp; &nbsp; &nbsp; &nbsp; children.remove(node);&nbsp; &nbsp; }&nbsp; &nbsp; public List<Node<T>> getChildren() {&nbsp; &nbsp; &nbsp; &nbsp; return children;&nbsp; &nbsp; }&nbsp; &nbsp; public Node getParent() {&nbsp; &nbsp; &nbsp; &nbsp; return parent;&nbsp; &nbsp; }&nbsp; &nbsp; public T getData() {&nbsp; &nbsp; &nbsp; &nbsp; return data;&nbsp; &nbsp; }&nbsp; &nbsp; public void setData(T data) {&nbsp; &nbsp; &nbsp; &nbsp; this.data = data;&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public boolean equals(Object o) {&nbsp; &nbsp; &nbsp; &nbsp; if (this == o) return true;&nbsp; &nbsp; &nbsp; &nbsp; Node<?> node = (Node<?>) o;&nbsp; &nbsp; &nbsp; &nbsp; return Objects.equals(data, node.data) &&&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Objects.equals(children, node.children);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public int hashCode() {&nbsp; &nbsp; &nbsp; &nbsp; return Objects.hash(data, children, parent);&nbsp; &nbsp; }}树 2import java.util.List;public class Tree2<T> extends Node<T> {&nbsp; &nbsp; public Tree2(T data) {&nbsp; &nbsp; &nbsp; &nbsp; super(data, null);&nbsp; &nbsp; }&nbsp; &nbsp; public boolean contains(T value) {&nbsp; &nbsp; &nbsp; &nbsp; return recurse(iterate(), value);&nbsp; &nbsp; }&nbsp; &nbsp; private boolean recurse(List<Node<T>> children, T value) {&nbsp; &nbsp; &nbsp; &nbsp; return children.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .anyMatch(item -> item.getData().equals(value) || item.iterate().size() > 0 && recurse(item.iterate(), value));&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Python
我要回答