每天一道劍指offer-樹的子結構
- 2019 年 10 月 4 日
- 筆記
前言
今天的題目 每天的題目見github(看最新的日期): https://github.com/gzc426 具體的題目可以去牛客網對應專題去找。
昨天的題解
題目
每天一道劍指offer-樹的子結構 來源:牛客網對應專題
題目詳述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
題目詳解
程式碼
public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root2 == null)//當Tree1和Tree2都不為零的時候,才進行比較。否則直接返回false return false; if(root1 == null) return false; boolean flag = false; if(root1.val == root2.val)//以這個根節點為為起點判斷是否包含Tree2 { flag = doHasSubtree(root1,root2); } if(flag) return flag; if(!flag) {//如果找不到,那麼就再去root的左兒子當作起點,去判斷時候包含Tree2 flag = HasSubtree(root1.left,root2); if(flag) return true; else{//如果還找不到,那麼就再去root的右兒子當作起點,去判斷時候包含Tree2 flag = HasSubtree(root1.right,root2); if(flag) return true; } } return false; } private boolean doHasSubtree(TreeNode root1,TreeNode root2) { if(root2 == null)//如果Tree2已經遍歷完了都能對應的上,返回true return true; if(root1 == null)//如果Tree2還沒有遍歷完,Tree1卻遍歷完了。返回false return false; if(root1.val != root2.val)//如果其中有一個點沒有對應上,返回false return false; //如果根節點對應的上,那麼就分別去子節點裡面匹配 return doHasSubtree(root1.left,root2.left) && doHasSubtree(root1.right,root2.right); } }
程式碼截圖(避免亂碼)
