劍指Offer 26 樹的子結構

2022-06-06 12:09:10 字數 986 閱讀 2876

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

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

例如:給定的樹a與樹b:

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

輸入:a = [1,2,3], b = [3,1]

輸出:false

輸入:a = [3,4,5,1,2], b = [4,1]

輸出:true

class solution 

private:

bool recur(treenode* a, treenode* b)

};

這道題雖然有兩個遞迴,看起來很複雜,但是這兩個遞迴都是用於遍歷的,非常容易理解。具體遍歷過程如下圖所示。這裡著重討論一下幾個重要語句的作用。

recur(a, b) || issubstructure(a->left, b) || issubstructure(a->right, b))這一句首先使用recur函式判斷根節點為b的樹是否是根節點為a的樹的子樹。具體判斷方法為:

recur(a, b)返回true時,由於||具有截斷性,所以上一條語句直接返回true;如果recur返回false,即匹配失敗時,則繼續對a做前序遍歷,即issubstructure(a->left, b) || issubstructure(a->right, b),a前序遍歷的終止條件為!a

劍指offer26 樹的子結構

輸入兩棵二叉樹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,...

劍指 Offer 26 樹的子結構

輸入兩棵二叉樹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,...

劍指 Offer 26 樹的子結構

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