Java 草垛和针叶树结构的比较

Java 草垛和针叶树结构的比较,java,tree,Java,Tree,我想写一个方法,记录草堆节点的所有位置,从其自身的模式(结构)与针的模式(结构)匹配的位置开始。存储在节点中的值不需要相等,它只是应该匹配的模式 插图 示例1 如果我有下面的草堆和针 在上面的例子中,程序需要记录 ROOT ROOT->Left 示例2 如果我有和上面一样的干草堆和我的针 然后我的节目会录制 ROOT ROOT->Left ROOT->Right 然而,我实现代码的方式似乎有缺陷,因为我的方法甚至记录了不应该为真的位置 我实现代码的方式是,我使用以下方法

我想写一个方法,记录草堆节点的所有位置,从其自身的模式(结构)与针的模式(结构)匹配的位置开始。存储在节点中的值不需要相等,它只是应该匹配的模式

插图

示例1

如果我有下面的草堆和针

在上面的例子中,程序需要记录

ROOT
ROOT->Left
示例2

如果我有和上面一样的干草堆和我的针

然后我的节目会录制

ROOT
ROOT->Left
ROOT->Right
然而,我实现代码的方式似乎有缺陷,因为我的方法甚至记录了不应该为真的位置

我实现代码的方式是,我使用以下方法返回一个包含所有这些位置的列表,我使用isSubtree方法检查从特定节点开始的模式是否找到匹配项

public static List<String> searchForNeedleInHaystack(Node haystack,
        Node needle) {
    List<String> resultList = new ArrayList<String>();
    if(haystack.getLeftChild() != null) {
        value = value + "L";//value is just a global string variable initially ""
        if(isSubtree(haystack.getLeftChild(), needle)) {
            resultList.add(value);
        } else {
            if(value.length() > 1)
                value = value.substring(0, value.length() - 1);
        }
        searchForNeedleInHaystack(haystack.getLeftChild(), needle);
    }

    if(haystack.getRightChild() != null) {
        value = value + "R";
        if(isSubtree(haystack.getRightChild(), needle)) {
            resultList.add(value);
        } else {
            if(value.length() > 1)
                value = value.substring(0, value.length() - 1);
        }
        searchForNeedleInHaystack(haystack.getRightChild(), needle);
    }
    return resultList;
}

public static boolean isSubtree(Node haystack, Node needle) {
    if(needle == null)
        return true;
    if(haystack == null)
        return false;
    return isSubtree(haystack.getLeftChild(), needle.getLeftChild()) && isSubtree(haystack.getRightChild(), needle.getRightChild());
}
问题

我只是想知道我可以使用什么样的逻辑来成功比较子树结构


提前谢谢

也许你也需要在
isSubtree
方法中检查needle和haystack的值是否相等?这些值并不重要,因为我只是想看看结构是否相同。包含的值不需要相等
public class Node {
    private String info;
    private Node leftChild = null;
    private Node rightChild = null;

    public Node() {
        this("");
    }

    public Node(String info) {
        this.info = info;
    }

    public void setinfo(String info) {
        this.info = info;
    }

    public void setLeftChild(Node n) {
        leftChild = n;
    }

    public void setRightChild(Node n) {
        rightChild = n;
    }

    public Node getLeftChild() {
        return leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public String getinfo() {
        return info;
    }

    public boolean isLeaf() {
        return rightChild == null && leftChild == null;
    }   
}