《兩棵樹的操作技巧》《空節點技巧》
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入:1 1示例 2:/ \ / \
2 3 2 3
[1,2,3], [1,2,3]輸出:true
輸入:1 1示例 3:/ \
2 2
[1,2], [1,null,2]輸出:false
輸入: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...