java - 检查两棵树是否相同

标签 java recursion stack

我制作了自己的 Tree 类,并尝试检查两棵树是否相同。但这里的问题是我正在使用这个电话:

Tree myTree = new Tree();
Tree mySecondTree = new Tree();
myTree.isIdentical(myTree, mySecondTree);

这样传递有点奇怪,我想这样传递:

myTree.isIdentical(mySecondTree);

isIdentical 函数:

class Tree<T>{
    T data;
    Tree left;
    Tree right;
    Tree(T data){
        this.data = data;
    }

    public boolean isIdentical(Tree t1, Tree t2){
        if(t1 == t2)
            return true;
        if(t1==null || t2==null)
            return false;
        return (
            (t1.data == t2.data) &&
            (isIdentical(t1.left, t2.left)) &&
            (isIdentical(t1.right, t2.right))
        );

    }
}

我试过使用 Stack,但我有点卡在这上面

最佳答案

既然要这样执行

myTree.isIdentical(mySecondTree);

你可以这样做

    public boolean isIdentical(Tree t2){
       Tree t1 = this;
       return isIdentical(t1, t2);
    }

    private boolean isIdentical(Tree t1, Tree t2){
    if(t1 == t2)
        return true;
    if(t1==null || t2==null)
        return false;
    return (
        (t1.data == t2.data) &&
        (isIdentical(t1.left, t2.left)) &&
        (isIdentical(t1.right, t2.right))
    );

}

关于java - 检查两棵树是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328083/

相关文章:

Java递归进阶

c - 为什么在这种特定情况下在堆栈上分配一个大元素不会失败?

javascript - 在 JavaScript 中通过键从嵌套对象数组中查找对象

haskell - Haskell中的整数平方根函数

c - 代码行澄清

c++ - 如何在 C++ 中创建一个位于堆而不是堆栈的数组?

java - Java中有没有办法预加1以上?

java - okHttp 和 SPDY 的异常

java - 单击任意位置时关闭 Activity

java - 如何正确设置 CTabItem 的边框样式