题目描述
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例1:
输入: [1, 2, 3], [1, 2, 3]
输出: true
示例2:
输入: [1, 2], [1, null, 2]
输出: false
示例3:
输入: [1, 2, 1], [1, 1, 2]
输出: false
思路分析
题目难度为简单 ,关于树这个数据结构的算法解用递归方式很容易求出,这里也是用递归解法。思路较简单:
- 目前两个节点均为
null
时,返回true
; - 均不为
null
时,判断值相等、左节点递归和右节点递归; - 有且仅有一个节点为
null
时,返回false
;
递归方式解法往往会有迭代式解法,这个解法会在日后讨论,没有更新前希望有多了解的可以直接访问官网查看解答。
解题代码
public static boolean solutionRecursive(TreeNode root1, TreeNode root2) {
if(root1 == null && root2 == null) return true;
else if(root1 != null && root2 != null){
return root1.val == root2.val
&& solutionRecursive(root1.left, root2.left)
&& solutionRecursive(root1.right, root2.right);
}
else return false;
}
复杂度分析
我们设n
为树的节点数目:
时间复杂度: 这里对每个节点进行了一次访问,时间复杂度为O(n)
;
空间复杂度:(这里参考得为官方解答)------------最优情况下(完全平衡二叉树)时为O(log(N))
,最坏情况下(完全不平衡二叉树为O(N)
),用于维护递归栈。
Github源码
完整可运行文件请访问GitHub。