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