LeetCode 100 相同的树 python3

 1、深度优先搜索

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        # 思路:深度优先搜索
        if p==None and q==None: # 停止递归的条件
            return True
        elif p==None or q==None:
            return False
        elif p.val != q.val:
            return False
        else: # 递归
                return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)

2、广度优先搜索

首先学习一下python的collections模块

collections是日常工作中的重点、高频模块,常用类型有:

  计数器(Counter)

  双向队列(deque)

  默认字典(defaultdict)

  有序字典(OrderedDict)

  可命名元组(namedtuple)

这里主要看双向队列:

 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        # 广度优先搜索
        if p==None and q==None:
            return True
        elif p==None or q==None:
            return False
        
        # 将p,q转化为队列
        queue1 = collections.deque([p])
        queue2 = collections.deque([q])
        
        while queue1 and queue2:
            # 取当前节点
            node1 = queue1.popleft()   
            node2 = queue2.popleft()
            if node1.val != node2.val:
                return False

            # 当前节点的左子节点以及右子节点
            left1, right1 = node1.left, node1.right
            left2, right2 = node2.left, node2.right

            if (not left1) ^ (not left2):
                return False
            if (not right1) ^ (not right2):
                return False
            
            if left1:
                queue1.append(left1)
            if right1:
                queue1.append(right1)
            if left2:
                queue2.append(left2)
            if right2:
                queue2.append(right2)
            
        return not queue1 and not queue2
            
            

# print(queue1)
# [10,5,15]
# deque([TreeNode{val: 10, left: TreeNode{val: 5, left: None, right: None}, right: TreeNode{val: 15, left: None, right: None}}])

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值