二叉樹 26題 樹的子結構

2021-10-13 13:00:48 字數 1702 閱讀 1796

輸入兩棵二叉樹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
若樹b是樹a的子結構,則子結構的根節點可能為樹a的任意乙個節點。因此,判斷樹b是否是樹a的子結構,需完成以下兩步工作:

演算法流程:

recur(a, b)函式:

終止條件:

當節點b為空:說明樹b已匹配完成(越過葉子節點),因此返回true;

當節點a為空:說明已經越過樹a葉子節點,即匹配失敗,返回false;

當節點a和b的值不同:說明匹配失敗,返回false;

返回值:

判斷a和b的左子節點是否相等,即recur(a.left, b.left)

判斷a和b的右子節點是否相等,即recur(a.right, b.right)

issubstructure(a, b)函式:

特例處理:當樹a為空或樹b為空時,直接返回false;

以節點a為根節點的子樹包含樹b,對應recur(a, b)

樹b是樹a左子樹的子結構,對應issubstructure(a.left, b)

樹b是樹a右子樹的子結構,對應issubsructure(a.right, b)

複雜度分析:

二叉樹 樹的子結構

題目描述 給定兩棵二叉樹tree1與tree2,現在要求判斷tree2是否為tree1的乙個子樹.分析 可以使用遞迴的方法,找到與tree2根節點值相同的tree1的節點n,然後遞迴呼叫函式對以n為根節點的子樹進行判定。include include using namespace std defi...

二叉樹的子結構

include include stack include queue using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return0 輸...

二叉樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 第一種方法是使用遞迴的思想,第一步通過遞迴找到 跟子樹根節點相同的 結點,找到後 呼叫 函式chen,再依次遞迴比較每乙個 結點 是否相等。這種遞迴的時間複雜度 太高了 在牛客上執行不過去。class solut...