【Leetcode】100 : 相同的樹(Python)
阿新 • • 發佈:2020-08-28
題目:
給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
題目解析:
方法一:
這個題目很明顯就可以用遞迴來做,有關樹的題目用遞迴來做基本上是我們需要想到的首選!如果兩個樹是相同的,我們只需要比較其樹根是相同的,同時遞迴呼叫比較樹根的下一級子樹是相同的,那麼則可以得到整個樹的結構是相同的,我自己的方法如下:
# 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語言刷這道題的方法也基本這樣,也就沒必要再想迭代解法了。