Algorithm 确定两个二叉树是否等价的时间复杂性

Algorithm 确定两个二叉树是否等价的时间复杂性,algorithm,data-structures,binary-tree,graph-theory,Algorithm,Data Structures,Binary Tree,Graph Theory,我用下面的代码片段解决了确定两个二叉树是否相等的问题 问题如下: 对于二叉树T,我们可以定义如下翻转操作:选择任意>节点,交换左、右子树 二叉树X等价于二叉树Y当且仅当 经过一些翻转操作,我们可以使X等于Y 给定两个二叉树root1和root2的根,如果 这两棵树是等价的,否则是假的 我的推理是,生长函数是T(n)=4(T(n-1)),四个递归调用中的每一个调用一个,其中n是最大树的高度。然后,我期望它的时间复杂度为O(4^n),但这与解决方案中的推理不匹配,该解决方案中的推理表示时间复杂度为O

我用下面的代码片段解决了确定两个二叉树是否相等的问题

问题如下:

对于二叉树T,我们可以定义如下翻转操作:选择任意>节点,交换左、右子树

二叉树X等价于二叉树Y当且仅当 经过一些翻转操作,我们可以使X等于Y

给定两个二叉树root1和root2的根,如果 这两棵树是等价的,否则是假的

我的推理是,生长函数是T(n)=4(T(n-1)),四个递归调用中的每一个调用一个,其中n是最大树的高度。然后,我期望它的时间复杂度为O(4^n),但这与解决方案中的推理不匹配,该解决方案中的推理表示时间复杂度为O(max(n_1,n_2))

考虑到解的时间复杂度不同,O(4^n)的推理有什么缺陷

class Solution {
    public boolean flipEquiv(TreeNode root1, TreeNode root2) {
        if (root1 == root2)
            return true;
        if (root1 == null || root2 == null || root1.val != root2.val)
            return false;

        return (flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right) ||
                flipEquiv(root1.left, root2.right) && flipEquiv(root1.right, root2.left));
    }
}

你能把你的问题解释清楚吗?我不知道这里有什么不正确的地方,也不知道你期望的是什么。问题陈述说,每个树中的节点都有唯一的值,所以4个递归调用中至少有2个会立即返回。你在每一步都从根开始,验证它们是否相等?如果是,我们可以向前移动,如果不是,我们可以交换它们,再次检查,如果它们现在相等,我们可以向前移动,如果它们不相等,我们可以直接返回false(因此,我们访问每个节点不超过两次)。然而,我们在每一步都要沿着树往下走,因此,复杂性是O(min)(N_1,N_2)。我认为它应该是O of min,而不是max。