LintCode - 子樹(shù)(普通)

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

難度:容易
要求:

有兩個(gè)不同大小的二進(jìn)制樹(shù): T1有上百萬(wàn)的節(jié)點(diǎn); T2 有好幾百的節(jié)點(diǎn)。請(qǐng)?jiān)O(shè)計(jì)一種算法,判定 T2 是否為 T1的子樹(shù)。

注意事項(xiàng)
若 T1 中存在從節(jié)點(diǎn) n 開(kāi)始的子樹(shù)與 T2 相同,我們稱(chēng) T2 是 T1 的子樹(shù)。也就是說(shuō),如果在 T1 節(jié)點(diǎn) n 處將樹(shù)砍斷,砍斷的部分將與 T2 完全相同。

樣例

下面的例子中 T2 是 T1 的子樹(shù):
       1                3
      / \              / 
T1 = 2   3      T2 =  4
        /
       4

下面的例子中 T2 不是 T1 的子樹(shù):
       1               3
      / \               \
T1 = 2   3       T2 =    4
        /
       4

思路

    /**
     * @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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 樹(shù)的概述 樹(shù)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹(shù)與前面介紹的線(xiàn)性表,棧,隊(duì)列等線(xiàn)性結(jié)構(gòu)不同,樹(shù)是一種非線(xiàn)性結(jié)構(gòu) 1.樹(shù)的定...
    Jack921閱讀 4,788評(píng)論 1 31
  • 基于樹(shù)實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),具有兩個(gè)核心特征: 邏輯結(jié)構(gòu):數(shù)據(jù)元素之間具有層次關(guān)系; 數(shù)據(jù)運(yùn)算:操作方法具有Log級(jí)的平...
    yhthu閱讀 4,489評(píng)論 1 5
  • 樹(shù)形動(dòng)態(tài)規(guī)劃,顧名思義就是樹(shù)+DP,先分別回顧一下基本內(nèi)容吧:動(dòng)態(tài)規(guī)劃:?jiǎn)栴}可以分解成若干相互聯(lián)系的階段,在每一個(gè)...
    Mr_chong閱讀 1,614評(píng)論 0 2
  • 題目 有兩個(gè)不同大小的二進(jìn)制樹(shù): T1有上百萬(wàn)的節(jié)點(diǎn); T2有好幾百的節(jié)點(diǎn)。請(qǐng)?jiān)O(shè)計(jì)一種算法,判定 T2是否為 T1...
    六尺帳篷閱讀 647評(píng)論 0 3
  • 今天上班差點(diǎn)遲到就差八秒鐘,弄得我心里很著急,每天還要端水、刷鍋、做粥、白灼菜品、加熱腸粉,切豬肝,豬腰,魷魚(yú)絲,...
    a512e5e18420閱讀 325評(píng)論 1 1

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