100 相同的樹

2022-01-26 13:47:04 字數 3284 閱讀 5208

《兩棵樹的操作技巧》《空節點技巧》

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例 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 1 2

[1,2,1], [1,1,2]輸出:false

1.需要提前判斷根節點

2.需要判斷子節點是否相同,很複雜,**也不夠精簡

3.關注的是當前節點,和子節點,顯得很臃腫。。。

#

definition for a binary tree node.

#class treenode(object):

#def __init__(self, x):

#self.val = x

#self.left = none

#self.right = none

'''1.用乙個棧來操作兩棵樹

2.每次入棧同時壓入兩棵樹的節點

3.每次去除同時取出兩棵樹的節點,這樣和操作一棵樹是一樣的。

'''class

solution(object):

defissametree(self, p, q):

""":type p: treenode

:type q: treenode

:rtype: bool

"""if p is none and q is none:return

true

if p is none and q: return

false

if p and q is none :return

false

que =

while

que:

nodep =que.pop(0)

nodeq =que.pop(0)

#當前節點一定是存在的,只需要對比值是否相同就行

if nodep.val!=nodeq.val:return

false

#先是p,q的左子節點存在->入棧

#(不管值對不對,這裡只關心兩棵樹的子節點是否都存在,值的正確與否交給上一行**)

#然後列出兩棵樹的子節點不一致的情況(笨辦法,全列出來了。。。因為有可能遇到葉子節點)

if nodep.left and

nodeq.left:

elif nodep.left and nodeq.left is none:return

false

elif nodep.left is none and nodeq.left:return

false

if nodep.right and

nodeq.right:

elif nodep.right and nodeq.right is none:return

false

elif nodep.right is none and nodeq.right : return

false

#全部沒問題,返回true

return

true

#

definition for a binary tree node.

#class treenode(object):

#def __init__(self, x):

#self.val = x

#self.left = none

#self.right = none

'''1.同樣是用乙個棧來遍歷兩棵樹

'''class

solution(object):

defissametree(self, p, q):

""":type p: treenode

:type q: treenode

:rtype: bool

"""sk =

while

sk: nodep =sk.pop(0)

nodeq =sk.pop(0)

'''兩棵樹的當前節點可能出現的幾種情況

p q

1.none,none (兩個都為空)

2. 3 ,none (乙個不為空,乙個空) 1.兩個都為空(true)

3.none, 3 (乙個空,乙個不為空) --簡化--> 2.其中乙個為空(false)

4. 3 , 2 (都不為空,但值不同) 3.值是否相同(false)

5. 3 , 3 (正解)

'''#

第一種情況

if nodep is none and nodeq is

none:

continue

##因為排除了兩個都為空的情況,就只剩下(情況2,情況3)、情況4、(正解)

#因此(情況2,情況3)只需要判斷其中乙個是否為none

if nodep is none or nodeq is none or nodep.val!=nodeq.val:

return

false

#因為是關注的當前節點,所以空子節點也會入棧

return

true

1.在這道題中,用o(n)的複雜度同時遍歷兩顆樹?

2.如何讓空子節點入棧?

3.空子節點入棧的前提下,如何避免葉子節點空子節點入棧?

4.python判斷節點空和非空

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...