20180703劍指offer題18 樹的子結構

2021-08-21 04:46:01 字數 2107 閱讀 3024

判斷一棵樹tree2是不是另一棵樹tree1的子結構,空樹不是任意乙個樹的子結構。

需要進行的判斷:

1.都不是none,判斷val,再進一步判斷(左右進一步看val,或者左右重新判斷)

2.tree1是空而tree2非空 ,return false

3.tree2已是空,return true

4.一開始就遇到空節點val==none:不論是tree1還是tree2 return false。

classtreenode:

def__init__(self,value=none):

self.val=value

self.left=noneself.right=nonedefsolution(tree1,tree2):

iftree1andtree2:#判斷1:都不是none,判斷val,再進一步判斷(左右進一步看val,或者左右重新判斷)

iftree1.val==none ortree2.val==none:#判斷4:遇到空節點,tree1 為空,tree2不可能是它的子樹;tree2為空,空樹不是任何樹的子樹

return falseiftree1.val==tree2.val:

returnsolution(tree1.left,tree2.left)andsolution(tree1.right,tree2.right)

else:

returnsolution(tree1.left,tree2)orsolution(tree1.right,tree2)

if nottree1andtree2:#判斷2:tree1是空而tree2非空 ,return false

return falsereturn true#判斷3:tree2已是空,return true

defmain():

#建立tree1

node1=treenode(1)

node2=treenode(2)

node3=treenode(3)

node4=treenode(4)

node5=treenode(5)

node6=treenode(6)

node1.left=node2

node1.right=node3

node3.right = node6

node2.left = node4

node2.right = node5

# 建立tree2

node7=treenode(2)

node8=treenode(5)

node7.right = node8

#建立tree3

node9=treenode(3)

node10=treenode(7)

node9.left=node10

#建立空樹tree4

node11=treenode()

print(solution(node1,node7))

print(solution(node1,node9))

print(solution(node1,node11))

if__name__=='__main__':

main()

true

false

false

true false none都是大寫開頭

劍指offer全套解答 劍指offer 1 5

1.二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class solution int n array 0 length i...

劍指offer全套解答 劍指offer 36 45

36.兩個鍊錶的第乙個公共節點 輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 public class solution return p 37.數字在排序陣列 現的次數 統計乙個數字在公升序陣列 現的次數。publi...

劍指offer全套解答 劍指offer 46 55

46.孩子們的遊戲 圓圈中最後剩下的數 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出...