給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入:11
/ \ / \
2323[1,
2,3]
,[1,
2,3]
輸出: true
示例 2:
輸入:11
/ \
22[1,2]
,[1,null,2]
輸出: false
示例 3:
輸入:11
/ \ / \
2112[1,
2,1]
,[1,
1,2]
輸出: false
兩棵樹相同滿足樹中所有的結點都相同,即node.val
、node.left
和node.right
都應該相同。從樹的性質出發,如果兩個樹是相同的,那麼它們的遍歷序列也必然是相同。因此,我們可以通過分別遍歷兩棵樹來獲取它們的遍歷序列(前序遍歷、中序遍歷和後序遍歷均可),然後判斷序列是否相同即可。
class
solution
:def
issametree
(self, p: treenode, q: treenode)
->
bool
:if p ==
none
and q ==
none
:return
true
if p ==
none
or q ==
none
:return
false
r1, r2 =
,[]def
inorder
(root, index)
:if root ==
none
:if index ==1-
1)else-1
)return
none
if index ==
1else
inorder(root.left, index)
inorder(root.right, index)
inorder(p,1)
inorder(q,2)
return r1 == r2
除了使用中序遍歷來輔助判斷外,同樣可以通過迭代法直接遞迴判斷子樹是否相同。
class
solution
:def
issametree
(self, p: treenode, q: treenode)
->
bool
:if p ==
none
and q ==
none
:return
true
if p ==
none
or q ==
none
:return
false
# 如果當前子樹的根節點值就不同,說明兩棵樹不同
if p.val != q.val:
return
false
# 否則繼續判斷它們的左右子樹是否分別相同
return self.issametree(p.rihgt, q.right)
and self.issametree(p.left, q.left)
第一種方式使用了額外的陣列,第二種方法使用遞迴時會引入棧,因此兩者的空間複雜度都為o(n
)o(n)
o(n)
;判斷過程需要訪問樹中的每乙個節點,因此時間複雜度為o(n
)o(n)
o(n)
。
100 相同的樹
鏈結 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false示例 3 輸入 1 1 2 ...
100 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true思路 注釋 public boolean issametree treenode p,treenode q ...
100 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true 示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false 示例 3 輸入 1 1 2 1...