100 相同的樹 python

2021-10-04 12:31:29 字數 2009 閱讀 5495

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例 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.valnode.leftnode.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...