【leetcode-Python】-Tree-100. Same Tree

题目链接

https://leetcode.com/problems/same-tree/

题目描述

给定两棵二叉树的根节点p和q,判断两棵树是否相同。

示例

Input:p = [1,2,3],q = 1,2,3

Output:true

【leetcode-Python】-Tree-100. Same Tree_第1张图片

Input: p = [1,2,1], q = [1,null,2]

Output: false

【leetcode-Python】-Tree-100. Same Tree_第2张图片

解决思路一

解决思路和【leetcode-Python】-Tree-101. Symmetric Tree类似,第一种思路是利用递归来解决。

递归函数输出两棵根节点分别为p q的二叉树是否相同的判断结果,结束条件为p、q均为None或仅有一个为None,或p.val != q.val;

将问题拆解为判断(p.val == q.val)&&(p.leftsubtree和q.leftsubtree相同)&&(p.rightsubtree和q.rightsubtree相同)

解决思路一Python实现

# 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
        if(p == None or q == None):
            return False
        if(p.val != q.val):
            return False
        return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)

时间复杂度和空间复杂度

时间复杂度为O(n), n为树中节点个数。

最好情况下空间复杂度为O(log(n)),最差情况下空间复杂度为O(n)。

解决思路二

第二种思路是利用迭代来解决。利用Python中的list实现栈的操作,依次判断对应位置的二叉树节点的值是否相同。

解决思路二Python实现

# 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:
        stack = [(p,q)]
        while(len(stack) != 0):
            l, r = stack.pop()
            if(l == None and r == None):
                continue;
            if(l == None or r == None):
                return False
            if(l.val != r.val):
                return False
            stack.append((l.left,r.left))
            stack.append((l.right,r.right))
        return True
            

时间复杂度和空间复杂度

由于每个节点仅被访问一次,时间复杂度为O(n), n为树中节点个数。

最好情况下空间复杂度为O(log(n)),最差情况下空间复杂度为O(n)。

你可能感兴趣的:(leetcode)