Leetcode-572: 另一個樹的子樹( leetcode100:相同的樹 )
題目描述:
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。
示例 1:
給定的樹 s:
思路:
一棵樹是否為另一棵樹的子樹,那麼只需要判斷第一棵樹中的每個節點為根節點的子樹是為和另一棵樹相等。
那麼此時就需要來實現判斷兩棵樹是否是同一棵樹的方法,即:leetcode-100. 相同的樹.
相同的樹 思路:
判斷兩棵樹是否為同一棵樹,首先兩棵樹的結構是一致的,並且每個節點對應的值(val)也是相等的。在判斷兩棵樹是否為同一棵樹,也就需要判斷結構和對應節點的值是否相等即可。
我們通過遞迴來實現:
- 如果兩棵樹對應當前的節點都為null:返回true
- 如果其中一棵樹的當前節點為null,另一棵樹對應的節點不為null:返回false
- 如果一棵樹對應節點的值和另一棵樹對應節點的值不相等:返回false
- 其他情況,繼續遞迴判斷
程式碼:
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null &&q==null)
{
return true;
}
if(q==null || p==null || p.val!=q.val ){
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
}
我們知道了如何判斷兩棵樹是否為同一顆樹之後,再回到本題目中,因此,本題目我們只需要以s樹中的每個節點作為一顆樹,和另一棵樹(t),判斷是否相同,直到遞迴完整棵s樹。
程式碼實現:
class Solution {
//用來遞迴從s二叉樹開始的每個節點為根節點的子二叉樹是否和t是同一顆樹
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s==null || t==null)
{
return false;
}
if(s==null && t==null)
{
return true;
}
if( isSameTree(s,t)==true)
{
return true;
}
return isSubtree(s.left,t) || isSubtree(s.right,t);
}
//此方法是用來判斷一棵二叉樹的是否是同一棵樹
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null &&q==null)
{
return true;
}
if(q==null || p==null || p.val!=q.val ){
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
}
相關文章
- 相同的樹
- 檢驗一顆樹是不是另一顆樹的子結構
- LeetCode 100——相同的樹LeetCode
- 樹的另一個構建方式
- leetcode 100.相同的樹 JavaLeetCodeJava
- 力扣刷題:100. 相同的樹力扣
- HDU 1671 字典樹(判斷是否有一個串是另一個串的子串)。
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- BZOJ 3589 動態樹(子樹操作,鏈查詢)
- 二叉樹的子結構二叉樹
- JZ-017-樹的子結構
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- 樹套樹
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- LeetCode題解(Offer26):判斷二叉樹A是否為二叉樹B的子樹(Python)LeetCode二叉樹Python
- 樹的學習——樹的儲存結構
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 樹:基本樹形
- Trie樹,字典樹
- 一類子樹問題的總結
- 樹上的等差數列 [樹形dp]
- 樹的重心
- 多路查詢樹(2-3 樹、2-3-4 樹、B 樹、B+ 樹)
- 樹的DFS序列,時間戳,樹的深度,重心時間戳
- 【leetcode 簡單】第二十一題 相同的樹LeetCode
- 樹4-樹的確定與#號建立
- 玩轉二叉樹(樹的遍歷)二叉樹
- 平衡樹和二叉樹的區別二叉樹
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 劍指offer-17:樹的子結構
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- 咬文嚼圖式的介紹二叉樹、B樹/B-樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- P3380 【模板】二逼平衡樹(樹套樹)
- 資料結構之樹( 線段樹,字典樹)資料結構