劍指offer-17:樹的子結構
題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
解題思路
- 從根節點開始,判斷值是否相同
- 如果不同則分別用A樹的左右孩子節點與B樹的根節點比較
- 沒有則直接返回
- 如果找到值相同的,則呼叫輔助方法遞迴判斷A樹的左右孩子和B樹的左右孩子是否相等
- 直到B樹為空,則返回true,否則回溯,繼續尋找A樹的與B跟節點值相同的孩子
- 直到A樹為空,則返回false
- 注意邊界判斷。空樹不是任意一個樹的子結構
程式碼實現
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean res = false;
if (root1 == null || root2 == null) {
return false;
}
if (root1.val == root2.val) {
res = HasSubTreeHelp(root1, root2);
}
if (!res) {
res = HasSubTreeHelp(root1.left, root2);
}
if (!res) {
res = HasSubTreeHelp(root1.right, root2);
}
return res;
}
public boolean HasSubTreeHelp (TreeNode root1,TreeNode root2) {
if (root2 == null) return true;
if (root1 == null) return false;
if (root1.val == root2.val){
return HasSubTreeHelp(root1.left, root2.left)
&& HasSubTreeHelp(root1.right, root2.right);
}
return false;
}
}
相關文章
- 二叉樹的子結構二叉樹
- JZ-017-樹的子結構
- 劍指offer——重建二叉樹二叉樹
- 反轉連結串列、合併連結串列、樹的子結構
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- 檢驗一顆樹是不是另一顆樹的子結構
- 劍指Offer 撲克牌順子
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 【劍指offer】27. 二叉樹的映象二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer(四)重建二叉樹二叉樹
- JS資料結構與演算法 - 劍指offer二叉樹演算法題彙總JS資料結構演算法二叉樹
- (python版)《劍指Offer》JZ57:二叉樹的下一個結點Python二叉樹
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 劍指 Offer 07. 重建二叉樹二叉樹
- 【劍指offer】【4】根據前序和中序結果,重建二叉樹二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 劍指office--31. 連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 劍指 Offer 42.連續子陣列的最大和陣列
- 樹結構總結
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 劍指 Offer 14- II. 剪繩子 II
- 樹結構的應用
- 樹的學習——樹的儲存結構
- 劍指offer-例題 連續子陣列的最大和陣列
- 《劍指Offer》- 連續子陣列的最大和或最小和陣列
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- 樹形結構
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹
- 一類子樹問題的總結
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 刷劍指