給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。python
若是兩個樹在結構上相同,而且節點具備相同的值,則認爲它們是相同的。ide
示例 1:函數
輸入:spa
1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]
輸出: true
示例 2:code
輸入:遞歸
1 1 / \ 2 2 [1,2], [1,null,2]
輸出: false
示例 3:it
輸入:class
1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2]
輸出: false二叉樹
若是兩個二叉樹都爲空,則兩個二叉樹相同。若是兩個二叉樹中有且只有一個爲空,則兩個二叉樹必定不相同。搜索
若是兩個二叉樹都不爲空,那麼首先判斷它們的根節點的值是否相同,若不相同則兩個二叉樹必定不一樣,若相同,再分別判斷兩個二叉樹的左子樹是否相同以及右子樹是否相同。這是一個遞歸的過程,所以能夠使用深度優先搜索,遞歸地判斷兩個二叉樹是否相同。
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if not p and not q: return True elif not p or not q: return False elif p.val != q.val: return False else: return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
時間複雜度:O(min(m,n)),其中 m 和 n 分別是兩個二叉樹的節點數。對兩個二叉樹同時進行深度優先搜索,只有當兩個二叉樹中的對應節點都不爲空時纔會訪問到該節點,所以被訪問到的節點數不會超過較小的二叉樹的節點數。
空間複雜度:O(min(m,n)),其中 m 和 n 分別是兩個二叉樹的節點數。空間複雜度取決於遞歸調用的層數,遞歸調用的層數不會超過較小的二叉樹的最大高度,最壞狀況下,二叉樹的高度等於節點數。