輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
這題分兩步:
第1:在樹a中找到和樹b的根節點的值一樣的節點r,注意樹的節點值可以有多個相同的值。
第2:判斷樹a中以r為根節點的子樹是不是包含和b一樣的樹結構。
這題難在遞迴基和判斷樹節點為空該返回什麼,一定要記清楚找頭結點的時候遇到空節點就返回錯,helper函式如果子樹為空,還有就是result的使用。
說明已經匹配完了,返回true;如果是樹a為空,說明匹配不到子樹,返回false。
理解難點:helper每次返回以該根節點開始的是否匹配,然後判斷左子樹和右子樹是否匹配。
/*struct treenode
};*/
class
solution
if(proot1 ==nullptr)
if(proot1 -> val != proot2 ->val)
return helper(proot1 -> left,proot2 -> left) && helper(proot1 -> right,proot2 ->right);
}bool hassubtree(treenode* proot1, treenode*proot2)
bool result = false
;
if(proot1 -> val == proot2 ->val)
if(!result)
if(!result)
return
result;
}};
/*struct treenode
};*/
class
solution
if(proot1 ==nullptr)
if(proot1 -> val != proot2 ->val)
return helper(proot1 -> left,proot2 -> left) && helper(proot1 -> right,proot2 ->right);
}bool hassubtree(treenode* proot1, treenode*proot2)
if(proot1 -> val == proot2 ->val)
}return helper(proot1 -> left,proot2) || helper(proot1 ->right,proot2);
}};
演算法複習 樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 分成兩步,第一步先從樹1中找到樹2的根節點,找到後就開始判斷子樹是否相同,否則從樹1繼續向下找,顯然可以使用遞迴實現。第二步是找到根節點後判斷樹是否相同,也可以使用遞迴,遞迴的出口是到樹2的葉子節點,即上面的節點...
程式設計題 樹的子結構
思路 正確理解題意 子結構到底是啥意思?很容易弄混淆的是子樹和子結構,下圖黃色黃是子樹,黑色框是子結構但不是子樹 一棵大樹 a,一棵小樹 b,若 b 是 a 的子樹,則 b 和 a 的乙個子節點c的結點值完全相同,它們倆的左子樹 右子樹所有結點的值也完全相同,子結構要求則沒那麼嚴格 1先寫乙個方法,...
演算法刷題 樹的子結構
問題 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思路 1 判斷b是不是空樹,如果是空樹,返回false 2 判斷a是不是空樹,如果是空樹,返回false 3 如果找到了對應b的根節點的點,即在這時候ab相同了,以這個根節點為為起點判斷是否包含b 4 判斷...