《劍指offer》樹的子結構

2021-08-21 16:36:29 字數 736 閱讀 6072

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

這題要借助遞迴的思想,邊界一定要判斷清楚,不然就很容易出錯。

想法簡單,先判斷兩顆樹根節點是不是相同,如果相同,就判斷樹1的根節點開始的位置下是不是包含子樹2。如果根節點不同,那從樹1的左子樹判斷是不是包含子樹2。如果還沒找到,就從樹1的右子樹判斷是不是包含子樹2。

其中 從 樹的某位置 判斷 是否包含子樹 這個過程要作為另乙個遞迴函式。

判斷子樹的遞迴函式,要注意的地方很多:

要先判斷子樹2是否遍歷完都找到了,則返回true

如果子樹2還沒完,樹1完了,就要返回false

注意!!

這裡一定要先判斷子樹2,然後判斷樹1.

如果先判斷樹1是否遍歷完,樹1遍歷完,找到了樹2為ture沒找到樹2為false,沒法判斷return的值。但樹2一旦遍歷完了,必定表示找到該子樹,要return true,這點一定要考慮清楚,絕對不能調換位置。

/**

public class treenode }*/

public

class

solution

return result;

}public

boolean

doeshassubtree(treenode node1,treenode node2)

}

劍指offer 樹的子結構

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。解析 解決樹類問題的時候遞迴是乙個很好的解決方案,並且寫的程式簡單,理解起來也很容易。遞迴的時候謝了乙個函式來判斷當前兩個根節點對應的子樹是否相等 issubtree 不想...

劍指offer 樹的子結構

題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。這實際上二叉樹遍歷演算法的一種應用,要在原二叉樹中查詢是否具有某課子樹,只需要判斷每個節點是否都在二叉樹中是否出現即可。所以需要先判斷頭結點,只有頭結點符合要求才繼續比較其子樹是否符合,一樣依次從頭結點開始比較直到其左右子樹進行比較,如果都符合...

劍指offer 樹的子結構

大體思路如下 在程式遞迴過程中,記得注意遞迴的出口以及空指標的處理 主程式中在root1 root2非空的條件下才能去判斷 判斷judge函式中,一些邊界出口為 if root2 null return true if root1 null return false public class sol...