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