LeetCode 100 判断相同的树

题目

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

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

算法思路1

使用迭代方法,比较俩颗树的结构和数值
只要每次一一对应地将结点放入队列,再一一对应地取出比较。当树的结构不相同时,两颗树每次都入队相同数量的结点,取出相同数量的结点,必然导致值不同。当树结构相同,但值不同时,也能比较值得到结果。

代码

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.add(p);  //就算p==null,也会加入队列中,指向null
        queue2.add(q);
        while(!queue1.isEmpty() || !queue2.isEmpty()){  //俩个队列全部输出出来
            TreeNode a = queue1.remove();
            TreeNode b = queue2.remove();
            if(a == null && b == null) continue;  //跳过本次循环,继续下一次循环
            if(a == null) return false;   //比较结构是否不同
            if(b == null) return false;
            if(a.val != b.val) return false;  //比较值是否不同
            queue1.add(a.left);
            queue1.add(a.right);
            queue2.add(b.left);
            queue2.add(b.right);    
        }
         return true ;   
    }
}

复杂度分析

时间复杂度 : O(n),其中 n 是树的结点数,因为每个结点都访问一次。空间复杂度 : 最优情况(完全平衡二叉树)时为 O(log(n)),最坏情况下(完全不平衡二叉树)时为 O(n),用于维护递归栈。

思路2

使用递归

代码


public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) return true;
        if (p == null || q == null) return false;
        if (p.val != q.val) return false;
        else return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }



递归条件,树的根结点,结构一样且数值一样,左右子树叶是相同的树。

复杂度和迭代的一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值