面試題04 10 檢查子樹

2021-10-07 08:25:17 字數 1869 閱讀 2821

題目鏈結

檢查子樹。你有兩棵非常大的二叉樹:t1,有幾萬個節點;t2,有幾萬個節點。設計乙個演算法,判斷 t2 是否為 t1 的子樹。

如果 t1 有這麼乙個節點 n,其子樹與 t2 一模一樣,則 t2 為 t1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 t2 完全相同。

示例1:

輸入:t1 = [1, 2, 3], t2 = [2]

輸出:true

示例2:

輸入:t1 = [1, null, 2, 4], t2 = [3, 2]

輸出:false

樹的節點數目範圍為[0, 20000]。

t2是t1的子集所以若t2中包含t1,則如果能我們找到t1和t2相同的val並且遞迴遍歷 直到t2等於null(t2遍歷完) 如果都相等,則證明t2是t1的子集。

具體實現

遞迴終止條件

1.當t1等於null並且t2不等於null 說明t1中一定不包含t2.

2.當t1中包含t2 並且t2為null 說明t1中一定包含t2.

如果找到t1和t2相同,則遞迴判斷t1的左節點和t2的左節點是否相等,t1的右節點和t2的右節點是否相等,都相等則t1包含t2

如果沒有找到t1和t2相同,那就繼續找,遞迴遍歷t1的左節點是否等於t2,t1的右節點是否等於t2.都找不到則證明t1不包含t2

遞迴真的很佛系,如果你覺得麻煩,請看第二種方法

/**

* @description: 檢查子樹

* @author mryan

* @date 2020/6/18 09:44

* @version 1.0

*/class

solution

public

boolean

solve

(treenode node1, treenode node2)

if(node1 == null && node2 != null)

if(node1.val == node2.val)

else

}}

巧妙運用工具。

具體實現:

中序遍歷t1得到t1的字串。

中序遍歷t2得到t2的字串。

將求樹t1是否包含樹t2轉換為求字串t1是否包含字串t2。

利用stringbuffer 簡單!

/**

* @description: 檢查子樹

面試題 04 10 檢查子樹

面試題 04.10.檢查子樹 中等題 遞迴 檢查子樹。你有兩棵非常大的二叉樹 t1,有幾萬個節點 t2,有幾萬個節點。設計乙個演算法,判斷 t2 是否為 t1 的子樹。如果 t1 有這麼乙個節點 n,其子樹與 t2 一模一樣,則 t2 為 t1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 ...

力扣日常打卡 面試題04 10 檢查子樹

題目描述 檢查子樹。你有兩棵非常大的二叉樹 t1,有幾萬個節點 t2,有幾萬個節點。設計乙個演算法,判斷 t2 是否為 t1 的子樹。如果 t1 有這麼乙個節點 n,其子樹與 t2 一模一樣,則 t2 為 t1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 t2 完全相同。示例 思路與題解 ...

演算法面試題 拓撲結構相同子樹

題目 解析 這個題目的目的很明確,就是判斷a是否包含b。這裡的做法是對兩顆二叉樹分別求先序遍歷,接著比較。但是要注意的是,先序遍歷需要進行特殊處理。舉例 先對整a棵樹進行先序遍歷,序列為12453。情況一 假設b二叉樹只有乙個節點3,那麼b子樹的先序遍歷序列就是3,接著判斷3是否為12453的子串,...