《劍指offer》刷題筆記胀瞪。如有更好解法熏瞄,歡迎留言脚祟。
關(guān)鍵字:二叉樹
遞歸
題目描述:
輸入兩棵二叉樹A,B强饮,判斷B是不是A的子結(jié)構(gòu)由桌。(ps:我們約定空樹不是任意一個(gè)樹的子結(jié)構(gòu))
思路:
- 雙遞歸:第一層遞歸判斷二叉樹A是否存在節(jié)點(diǎn)等于二叉樹B的根。
- 如果存在這樣一個(gè)節(jié)點(diǎn)邮丰,那么對(duì)比A的子樹與二叉樹B行您。
- 結(jié)束條件:當(dāng)二叉樹B全部節(jié)點(diǎn)被遍歷完,A的子樹還沒遍歷完剪廉,說明B是A的一部分娃循,返回true,否則為false斗蒋。
- 完整代碼
function compare(root1,root2){
if(root2 === null) return true;
if(root1 === null) return false;
if(root1.val === root2.val){
return compare(root1.left,root2.left)&&compare(root1.right,root2.right);
}else{
return false;
}
}
function HasSubtree(pRoot1, pRoot2)
{
if(pRoot1 === null || pRoot2 === null) return false;
return compare(pRoot1,pRoot2)
|| HasSubtree(pRoot1.left,pRoot2) || HasSubtree(pRoot1.right,pRoot2);
}