zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Same Tree(相同的树)

    Given two binary trees, write a function to check if they are the same or not.Two binary trees are considered the same if they are structurally identical and the nodes have the same value.

    Example 1:

    Input:     1          1
                 /         / 
                2   3     2   3
    
            [1,2,3],   [1,2,3]
    
    Output: true
    

    Example 2:

    Input:     1         1
                 /            
               2              2
    
            [1,2],     [1,null,2]
    
    Output: false
    

    Example 3:

    Input:     1          1
                 /         / 
               2   1     1   2
    
            [1,2,1],   [1,1,2]
    
    Output: false 

    思路

      这道题很简单我们使用前序遍历的方法一个一个的进行比较,然后判断是否相等,如果中途任意一个不相等或者一个节点为空都直接返回false。
    解题代码

     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def isSameTree(self, p, q):
    10         """
    11         :type p: TreeNode
    12         :type q: TreeNode
    13         :rtype: bool
    14         """
    15         if not p and not q:
    16             return True
    17         if not p or not q:
    18             return False 
    19         if p.val == q.val:  
    20             return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) 
    21         return False
      一开始写的解决代码,但是发现可以写的更简单一点
     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def isSameTree(self, p, q):
    10         """
    11         :type p: TreeNode
    12         :type q: TreeNode
    13         :rtype: bool
    14         """
    15         if not p and not q:
    16             return True
    17         return self.preorder(p, q)
    18         
    19         
    20     def preorder(self, p, q):
    21         if not p and not q:  # 都为空返回True
    22             return True
    23         if not p or not q:        # 如果其中一个为空返回False
    24             return False
    25         if p.val == q.val:        # 值相等的话直接继续判断
    26             res = self.preorder(p.left, q.left) and self.preorder(p.right, q.right)
    27             return res
    28         return False 
  • 相关阅读:
    CSS之APP开发比较实用的CSS属性
    关于 js 中的 call 和 apply使用理解
    灵感一:搜索型APP,帮助读书爱好者,搜索某本书的关键字
    常用排序算法:基数排序
    常用排序算法:桶排序
    常用排序算法:计数排序
    常用排序算法:希尔排序
    常用排序算法:归并排序
    常用排序算法:堆排序
    常用排序算法:快速排序
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10849987.html
Copyright © 2011-2022 走看看