輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
要查詢樹a中是否存在和樹b結構一樣的子樹,我們可以分兩步:第一步在樹a中找到和b的根節點的值一樣的結點r,第二步再判斷樹a中以r為根結點的子樹是不是包含和樹b一樣的結構。
以上面的兩棵樹為例來詳細分析這個過程。首先我們試著在樹a中找到值為8的結點。從樹a的根節點開始遍歷,我們發現它的根節點的值就是8.接著我們就去判斷樹a的根節點下面的子樹是不是含有和樹b一樣的結構。在樹a中,根節點的左子結點的值是8,而樹b的根節點的左子結點是9,對應的兩個結點不同。
因此我們仍然要遍歷a,接著查詢值為8的結點。我們在樹的第二層中找到乙個值為8 的結點,然後進行第二步的判斷,即判斷這個結點下面的子樹是否含有和樹b一樣結構的子樹。於是我們遍歷這個結點下面的子樹,先後得到兩個子節點9和2,這和樹b的結構完全相同。此時我們在樹a中找到了乙個和樹b的結構一樣的子樹,因此樹b和樹a的子結構。
一定要檢查邊界條件,即檢查空指標。當樹a或樹b為空的時候,定義相同的輸出。如果沒有檢查並做響應的處理,程式非常容易崩潰,這是面試的時候非常忌諱的事情。
public boolean hassubtree(treenode root1, treenode root2)
private boolean issubtreewithroot(treenode root1, treenode root2)
17 樹的子結構
樹的子結構 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任何樹的子結構 思路 首先考慮邊界條件 如果樹a為空或者樹b為空,那麼返回值都應為false 然後,判斷兩棵樹的根結點是否相等,如果相等的話,再判斷樹的左子樹以及右子樹是否分別相等 如果一開始兩棵樹的根結點不相等,那麼遞...
17 樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 遞迴思想,如果根節點相同則遞迴呼叫issubtree 如果根節點不相同,則判斷tree1的左子樹和tree2是否相同,再判斷右子樹和tree2是否相同 public class treenode public c...
17 樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 用遞迴來實現,從a樹的根節點開始,判斷其所有的節點是不是依次和樹b相同,如不同,遞迴呼叫函式,繼續判斷樹a當前節點的左子樹的所有節點或右子樹的所有節點是否和樹b所有節點相同,直到遍歷到父樹a的葉子節點,如果不是完...