演算法刷題 樹的子結構

2021-09-22 19:33:26 字數 862 閱讀 3229

問題:輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

思路:1、判斷b是不是空樹,如果是空樹,返回false;

2、判斷a是不是空樹,如果是空樹,返回false;

3、如果找到了對應b的根節點的點,即在這時候ab相同了,以這個根節點為為起點判斷是否包含b;

4、判斷是否包含b?-->因為此時找到了ab相同的節點,所以要遍歷他們的左右節點是否相同,結束條件是b為空,如果b為空,說明匹配完成了,b是子樹,返回true;如果b還沒結束,a先結束了,說明不匹配,返回false;如果匹配過程中value值不相等,返回false;

5、如果不包含,則用a根節點的左兒子判斷是否包含b,還不包含,就用a根節點的右兒子判斷是否包含b。

**:

/**

public class treenode }*/

public class solution

if(root1 == null)

boolean result = false;

if(root1.val == root2.val)

if(!result)

}return result;

}public boolean containsubtree(treenode root1,treenode root2)

if(root1 == null && root2 != null)

if(root1.val != root2.val)

return (containsubtree(root1.left,root2.left) && containsubtree(root1.right,root2.right));

}}

牛客網刷題 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 解析 可以想見整個過程 1 a,b首先看根節點對不對,如果對了,看根節點的左右結點對不對。2 若第乙個根節點沒有配對成功,則換成a的左子結點來配對。3 若左子結點沒有成功,則換成a的右子結點來配對。st...

劍指Offer刷題筆記 樹的子結構

輸入兩顆二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 這題思路還是挺清晰的 遞迴比較兩個樹的結點值。hassubtree函式主要是在a裡找b的根節點。找到了之後用issame函式比較兩個子樹。兩個函式都是遞迴呼叫的,但是要注意邏輯的順序 用result變數記錄搜尋的...

程式設計題 樹的子結構

思路 正確理解題意 子結構到底是啥意思?很容易弄混淆的是子樹和子結構,下圖黃色黃是子樹,黑色框是子結構但不是子樹 一棵大樹 a,一棵小樹 b,若 b 是 a 的子樹,則 b 和 a 的乙個子節點c的結點值完全相同,它們倆的左子樹 右子樹所有結點的值也完全相同,子結構要求則沒那麼嚴格 1先寫乙個方法,...