1. 程式人生 > 實用技巧 >【Leetcode】100 : 相同的樹(Python)

【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語言刷這道題的方法也基本這樣,也就沒必要再想迭代解法了。