赞
踩
实现思路:使用递归的方法来比较两棵树是否相等。首先比较根节点的值,如果相等,则继续比较左右子树。左子树和右子树可以互换位置进行比较。
复杂度估计:
时间复杂度:O(n),其中n是两棵树中节点数的较大值。
空间复杂度:O(h),其中h是两棵树中较高的树的高度。这是由于递归调用栈的深度导致的。在最坏的情况下,树是完全不平衡的,空间复杂度为O(n)。
举例:
// 树对象
public class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int data) {
this.data = data;
this.left = null;
this.right = null;
}
}
// 比较树是否相等
public class Solution {
public boolean isEqual(TreeNode rootA, TreeNode rootB) {
if (rootA == null && rootB == null) {
return true;
}
if (rootA == null || rootB == null) {
return false;
}
if (rootA.data != rootB.data) {
return false;
}
return isEqual(rootA.left, rootB.left) && isEqual(rootA.right, rootB.right) ||
isEqual(rootA.left, rootB.right) && isEqual(rootA.right, rootB.left);
}
}
最近在学习算法,待学完后看下面算法是否可以优化时间复杂度、空间复杂度。当然,希望大佬们不吝赐教!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。