LeetCode:100. 相同的树

简单题目,我最开始想到的就是广度优先遍历,既然是广度优先,自然用栈。使用两个栈,一个树用一个栈。同时判断出现元素的要求。一旦不等于就可以退出函数返回False了。

from collections import deque
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        def check(p, q):
            if not p and not q:
                return True
            if not p or not q:
                return False
            if p.val != q.val:
                return False
            return True
    
        deque1 = deque([p])
        deque2 = deque([q])
        
        while len(deque1) or len(deque2):
            p = deque1.popleft()
            q = deque2.popleft()
            if not check(p, q):
                return False
            if p:
                deque1.append(p.left)
                deque1.append(p.right)
                deque2.append(q.left)
                deque2.append(q.right) 
          
        return True

在while循环中, if p的作用是检测是不是到达叶子节点了。因为叶子节点之后是None,None是没有left和right的。另外,仅仅判断p不是p and q,是因为经过check,p和q要吗是相等的,要吗都是None。只判断一个就可以了

 

 

另一个办法是递归。函数判断输入的两个节点的情况

1. 如果不相等,返回Fasle。

2. 如果相等,继续递归判断左右孩子节点的情况。

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if p == None and q == None:
            return True
        if not p or not q:
            return False
        if p.val != q.val:
            return False
        else:
            return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值