zoukankan      html  css  js  c++  java
  • 【Leetcode】100 : 相同的树(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==q==None:
                return True
            if q==None or p==None:
                return False
            if p.val==q.val:
                pleft=p.left
                pright=p.right
                qleft=q.left
                qright=q.right
                if self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right):
                    return True

    首先是设定递归的条件,然后在一级一级向下比较就可以了,思想和之前《剑指offer》当中的镜像二叉树的思想是相同的,后来发现自己第二步在进行递归的时候写多余了,没必要将树再往下推一步然后递归,可以直接进行递归,因此修改后如下:

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

    这样两个if可以合并成一个if语句,减少了时间复杂度,同时也不需要再进行遍历到下一级之后再做递归,最后的成绩如下:

     后来看了看其他人用java语言/go语言刷这道题的方法也基本这样,也就没必要再想迭代解法了。

     

  • 相关阅读:
    净化-湿式除尘器:湿式除尘器
    净化-袋式除尘器:袋式除尘器
    LOCK
    locale
    loadkeys
    LOAD
    ln -在文件之间建立连接
    lmhosts
    listen
    listalias
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13579657.html
Copyright © 2011-2022 走看看