标签:解法 语言 loading http 时间复杂度 基本 时间 结构 elf
题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
方法一:
这个题目很明显就可以用递归来做,有关树的题目用递归来做基本上是我们需要想到的首选!如果两个树是相同的,我们只需要比较其树根是相同的,同时递归调用比较树根的下一级子树是相同的,那么则可以得到整个树的结构是相同的,我自己的方法如下:
# 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语言刷这道题的方法也基本这样,也就没必要再想迭代解法了。
标签:解法 语言 loading http 时间复杂度 基本 时间 结构 elf
原文地址:https://www.cnblogs.com/geeksongs/p/13579657.html