245. 子樹

描述

有兩個不同大小的二叉樹: T1 有上百萬的節(jié)點; T2 有好幾百的節(jié)點。請設(shè)計一種算法,判定 T2 是否為 T1的子樹。

注意事項

若 T1 中存在從節(jié)點 n 開始的子樹與 T2 相同,我們稱 T2 是 T1 的子樹。也就是說,如果在 T1 節(jié)點 n 處將樹砍斷,砍斷的部分將與 T2 完全相同。

樣例

下面的例子中 T2 是 T1 的子樹:

       1                3
      / \              / 
T1 = 2   3      T2 =  4
        /
       4

下面的例子中 T2 不是 T1 的子樹:

       1               3
      / \               \
T1 = 2   3       T2 =    4
        /
       4

思路

考慮兩棵樹都為空, 兩棵樹相等,兩棵樹不相等時分別對 T1 的左子樹是否包含 T2 以及 T1 的右子樹是否包含 T2 進行判斷

代碼

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param T1, T2: The roots of binary tree.
     * @return: True if T2 is a subtree of T1, or false.
     */
    public boolean isSubtree(TreeNode T1, TreeNode T2) {
        if (T2 == null) {
            return true;
        }
        if (T1 == null) {
            return false;
        }
        
        if (isEqual(T1, T2)) {
            return true;
        }
        if (isSubtree(T1.left, T2) || isSubtree(T1.right, T2)) {
            return true;
        }
        return false;
    }
    
    private boolean isEqual(TreeNode T1, TreeNode T2) {
        // 遞歸出口
        if (T1 == null || T2 == null) {
            return T1 == T2;
        }
        if (T1.val != T2.val) {
            return false;
        }
        return isEqual(T1.left, T2.left) && isEqual(T1.right, T2.right);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹與前面介紹的線性表,棧,隊列等線性結(jié)構(gòu)不同,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,750評論 1 31
  • 目錄 0.樹0.1 一般樹的定義0.2 二叉樹的定義 1.查找樹ADT 2.查找樹的實現(xiàn)2.1 二叉查找樹2.2 ...
    王偵閱讀 7,557評論 0 3
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 5,984評論 0 19
  • 公開演講,你會緊張嗎?是的,很緊張。我想大多數(shù)的人都會是這樣回答的。正如李笑來老師說的:“你并不孤單!” 今天,我...
    玉如藍閱讀 1,551評論 0 5
  • 很幸運,遇到了很多貴人、恩人。 我的悟性不高但也不低,也只能在我的思想層次上覺悟,向渡過我的“佛”,獻上感恩之心,...
    股市V神閱讀 653評論 0 1

友情鏈接更多精彩內(nèi)容