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);
}
}
相關文章
- 檢驗一顆樹是不是另一顆樹的子結構
- 二叉樹的子樹和子結構 c++二叉樹C++
- LeetCode 100——相同的樹LeetCode
- 相同二叉樹和鏡面二叉樹問題二叉樹
- leetcode 100.相同的樹 JavaLeetCodeJava
- 二叉樹葉子個數二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- LintCode 子樹
- 樹(1)--樹和二叉樹的基本定義二叉樹
- 樹套樹
- 二叉樹的子結構二叉樹
- 【劍指offer】樹的子結構
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- BZOJ 3589 動態樹(子樹操作,鏈查詢)
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 樹的學習——樹的儲存結構
- 多路查詢樹(2-3 樹、2-3-4 樹、B 樹、B+ 樹)
- 一類子樹問題的總結
- JZ-017-樹的子結構
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 平衡樹和二叉樹的區別二叉樹
- 樹4-樹的確定與#號建立
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- Same Tree 比較兩個二叉樹是否完全相同二叉樹
- LeetCode題解(Offer26):判斷二叉樹A是否為二叉樹B的子樹(Python)LeetCode二叉樹Python
- 資料結構之樹( 線段樹,字典樹)資料結構
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 劍指offer-17:樹的子結構
- 劍指offer面試18 樹的子結構面試
- B樹(多路查詢樹)
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- oracle樹的裁剪Oracle
- 霍夫曼樹(最優二叉樹)的實現二叉樹
- 一個簡單的樹查詢
- B 樹和 B+樹的區別, 為什麼 MySQL 要使用 B+樹MySql