劍指offer 18 樹的子結構

2021-08-08 10:27:21 字數 1419 閱讀 3360

題目描述

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

思路:

用遞迴,遍歷a樹的每乙個節點,然後對於每乙個節點,再判斷是否和a相匹配。

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution:

defhassubtree

(self, proot1, proot2):

# write code here

if proot2 == none

or proot1 == none:

return

false

res = false

res = self.func(proot1, proot2)

if res == true:

return

true

if proot1.left != none:

res = self.hassubtree(proot1.left, proot2)

if res == true:

return

true

if proot1.right != none:

res = self.hassubtree(proot1.right, proot2)

return res

deffunc

(self, proot1, proot2):

left = false

right = false

if proot1.val == proot2.val:

if proot1.left != none

and proot2.left != none:

left = self.func(proot1.left, proot2.left)

elif proot2.left == none:

left = true

if proot1.right != none

and proot2.right != none:

right = self.func(proot1.right, proot2.right)

elif proot2.right == none:

right = true

if left == true

and right == true:

return

true

return

false

劍指offer18樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 1 先遞迴判斷a的結點值和b根節點值是否相等,相等再繼續判斷是否可能為子樹。2 判斷是否為子樹時,遞迴判斷左右子樹是否相等。class treenode def init self,x self.val x se...

劍指offer 18 樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 首先,遍歷a的節點,找到與b的根節點值相同的節點。然後取判斷以這兩個節點開頭的樹,是否相等。判斷兩個子樹相等的條件也是乙個遞迴。知道t1為空的時候,就算是判斷完了,此時返回true bool hassubtree...

劍指offer 18 醜數

題目 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。直觀的想法 從1開始乙個個判斷數字是否為醜數,遇見醜數就記錄下來,直到找到低n個為止,不過這樣計算複雜度太大。class...