《LeetCode筆記51》 樹的子結構

2021-10-05 15:23:22 字數 1474 閱讀 7635

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

b是a的子結構, 即 a中有出現和b相同的結構和節點值。

例如:給定的樹 a:

3

/ \4   5

/ \1   2

給定的樹 b:

4 /1

返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。

示例 1:

輸入:a = [1,2,3], b = [3,1]輸出:false
示例 2:

輸入:a = [3,4,5,1,2], b = [4,1]輸出:true
限制:

0 <= 節點個數 <= 10000

思路:遞迴+中序遍歷

首先定義乙個函式用來判定以a、b是否相等(遞迴過程)。

子樹判定:先判定a與b是否相等,如果相等則返回,不相等則判斷a的左右子樹是否和b相等(遞迴過程)。

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def issubstructure(self, a: treenode, b: treenode) -> bool:

if a==none or b==none:

return false

if self.issametree(a, b):

return true

return self.issubstructure(a.left, b) or self.issubstructure(a.right, b)

def issametree(self, a, b):

if b==none:

return true

elif a==none:

return false

if a.val==b.val:

return self.issametree(a.left, b.left) and self.issametree(a.right, b.right)

else:

return false

Leetcode 樹的子結構

leetcode 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。思路 先判斷b 為空,則返回 false 在a中遍歷,看b的根節點是否出現 如果出現,比較這個節點的子樹是否與b 相同 definition for ...

leetcode 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。由於當前子結構的根節點可能位於樹中任意節點...

LeetCode小結 樹的最優子結構(遞迴)

做了很多樹的題目,發現非常多遞迴求最優子結構的 最大經過節點數 最長路徑等 大意 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。class solution 變型題 543.二叉樹的直徑 大意 給定一棵二叉樹,你需要計算它...