算法修炼之路—【树】Leetcode 100 相同的树

题目描述

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例1:

输入: [1, 2, 3], [1, 2, 3]
在这里插入图片描述
输出: true

示例2:

输入: [1, 2], [1, null, 2]
在这里插入图片描述
输出: false

示例3:

输入: [1, 2, 1], [1, 1, 2]
在这里插入图片描述
输出: false

思路分析

题目难度为简单 ,关于树这个数据结构的算法解用递归方式很容易求出,这里也是用递归解法。思路较简单:

  1. 目前两个节点均为null时,返回true
  2. 不为null时,判断值相等、左节点递归和右节点递归;
  3. 有且仅有一个节点为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

猜你喜欢

转载自blog.csdn.net/u011106767/article/details/106240201