国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu)

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

廢話不多說,喊一句號(hào)子鼓勵(lì)自己:程序員永不失業(yè),程序員走向架構(gòu)!本篇Blog的主題是【子結(jié)構(gòu)】,使用【二叉樹】這個(gè)基本的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),這個(gè)高頻題的站點(diǎn)是:CodeTop,篩選條件為:目標(biāo)公司+最近一年+出現(xiàn)頻率排序,由高到低的去??蚑OP101去找,只有兩個(gè)地方都出現(xiàn)過才做這道題(CodeTop本身匯聚了LeetCode的來源),確保刷的題都是高頻要面試考的題。

【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu),# 二叉樹,數(shù)據(jù)結(jié)構(gòu)

明確目標(biāo)題后,附上題目鏈接,后期可以依據(jù)解題思路反復(fù)快速練習(xí),題目按照題干的基本數(shù)據(jù)結(jié)構(gòu)分類,且每個(gè)分類的第一篇必定是對基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的介紹。

樹的子結(jié)構(gòu)【MID】

雙重遞歸,前所未有的體驗(yàn)

題干

直接粘題干和用例【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu),# 二叉樹,數(shù)據(jù)結(jié)構(gòu)
【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu),# 二叉樹,數(shù)據(jù)結(jié)構(gòu)

解題思路

原題解地址,若樹 B 是樹 A 的子結(jié)構(gòu),則子結(jié)構(gòu)的根節(jié)點(diǎn)可能為樹 A 的任意一個(gè)節(jié)點(diǎn)。因此,判斷樹 B 是否是樹 A 的子結(jié)構(gòu),需完成以下兩步工作:

  1. 先序遍歷樹 A 中的每個(gè)節(jié)點(diǎn) node ;(對應(yīng)函數(shù) isSubStructure(A, B)
  2. 判斷樹 A 中以 node 為根節(jié)點(diǎn)的子樹是否包含樹 B 。(對應(yīng)函數(shù) recur(A, B)

【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu),# 二叉樹,數(shù)據(jù)結(jié)構(gòu)
樹 A 的根節(jié)點(diǎn)記作 節(jié)點(diǎn) A ,樹 B 的根節(jié)點(diǎn)稱為 節(jié)點(diǎn) B 。

recur(A, B) 函數(shù)

終止條件:

  • 當(dāng)節(jié)點(diǎn) B 為空:說明樹 B 已匹配完成(越過葉子節(jié)點(diǎn)),因此返回 true ;
  • 當(dāng)節(jié)點(diǎn) A 為空:說明已經(jīng)越過樹 A 的葉節(jié)點(diǎn),即匹配失敗,返回 false;
  • 當(dāng)節(jié)點(diǎn) A 和 B 的值不同:說明匹配失敗,返回 false ;

返回值:

  • 判斷 A 和 B 的 左子節(jié)點(diǎn) 是否相等,即 recur(A.left, B.left) ;
  • 判斷 A 和 B 的 右子節(jié)點(diǎn) 是否相等,即 recur(A.right, B.right) ;

isSubStructure(A, B) 函數(shù)

特例處理: 當(dāng) 樹 A 為空 或 樹 B 為空 時(shí),直接返回 false;

返回值: 若樹 B 是樹 A 的子結(jié)構(gòu),則必滿足以下三種情況之一,因此用或 || 連接;

  • 以 節(jié)點(diǎn) A 為根節(jié)點(diǎn)的子樹 包含樹 B ,對應(yīng) recur(A, B);
  • 樹 B 是 樹 A 左子樹 的子結(jié)構(gòu),對應(yīng) isSubStructure(A.left, B);
  • 樹 B 是 樹 A 右子樹 的子結(jié)構(gòu),對應(yīng) isSubStructure(A.right, B)

【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu),# 二叉樹,數(shù)據(jù)結(jié)構(gòu)

代碼實(shí)現(xiàn)

給出代碼實(shí)現(xiàn)基本檔案

基本數(shù)據(jù)結(jié)構(gòu)二叉樹
輔助數(shù)據(jù)結(jié)構(gòu)
算法遞歸
技巧

其中數(shù)據(jù)結(jié)構(gòu)、算法和技巧分別來自:

  • 10 個(gè)數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表、棧、隊(duì)列、散列表、二叉樹、堆、跳表、圖、Trie 樹
  • 10 個(gè)算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動(dòng)態(tài)規(guī)劃、字符串匹配算法
  • 技巧:雙指針、滑動(dòng)窗口、中心擴(kuò)散

當(dāng)然包括但不限于以上文章來源地址http://www.zghlxwxcb.cn/news/detail-727681.html

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
     /**
     * 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可
     *
     *
     * @param n int整型 the n
     * @return int整型
     */
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        // 1 如果A樹或B樹為空,則匹配失敗
        if (A == null || B == null) {
            return false;
        }
        // 2 A的當(dāng)前節(jié)點(diǎn)包含B,或A的左子樹包含B,或A的右子樹包含B
        return isNodeSub(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
    }

    private boolean isNodeSub(TreeNode node, TreeNode B) {

        // 1 如果B為空,說明B節(jié)點(diǎn)比對完成,匹配成功【終止條件】
        if (B == null ) {
            return true;
        }

        // 2 如果B不為null,且node為空,說明尚未匹配完B但已越過A的節(jié)點(diǎn)樹葉子節(jié)點(diǎn),匹配失敗【終止條件】
        if (node == null ) {
            return false;
        }

        // 3 如果node節(jié)點(diǎn)值不等于B,則說明不是子結(jié)構(gòu),匹配失敗【本層任務(wù)】
        if (node.val != B.val) {
            return false;
        }

        // 4 比較node與B的左右子節(jié)點(diǎn),必須都滿足條件才可以【返回值】
        return isNodeSub(node.left, B.left) && isNodeSub(node.right, B.right);
    }
}

復(fù)雜度分析

  • 時(shí)間復(fù)雜度 O(MN): 其中 M,N分別為樹 A 和 樹 B 的節(jié)點(diǎn)數(shù)量;先序遍歷樹 A 占用 O(M) ,每次調(diào)用 recur(A, B) 判斷占用 O(N)。
  • 空間復(fù)雜度 O(M) : 當(dāng)樹 A 和樹 B 都退化為鏈表時(shí),遞歸調(diào)用的深度取決于二叉樹A的高度,最壞情況下,二叉樹A是一個(gè)完全不平衡的樹,高度為M,因此遞歸調(diào)用的最大深度為M。每次遞歸調(diào)用都需要一些額外的??臻g來保存函數(shù)調(diào)用的上下文,因此空間復(fù)雜度為O(M)

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)-二叉樹 九】【樹的子結(jié)構(gòu)】:樹的子結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    ? 個(gè)人主頁 : 日刷百題 系列專欄 : 〖C語言小游戲〗〖Linux〗〖數(shù)據(jù)結(jié)構(gòu)〗 ?〖C語言〗 ?? 歡迎各位 → 點(diǎn)贊 ??+ 收藏 ??+ 留言 ??? ? 這里我們使用先序遍歷的思想來創(chuàng)建二叉樹,這里的內(nèi)容對于剛接觸二叉樹的朋友可能有些難理解,不妨先看完下面的二叉樹各種遍歷

    2024年02月05日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    學(xué)習(xí)鏈?zhǔn)蕉鏄湟廊N遍歷方式,便于對二叉樹的節(jié)點(diǎn)以及左子樹和右子樹進(jìn)行操作。 前序遍歷:根、左子樹、右子樹 中序遍歷:左子樹、根、右子樹 后序遍歷:左子樹、右子樹、根 以下圖為例: 得到的結(jié)果: 前序遍歷:1 2 3 4 5 6 中序遍歷:3 2 1 5 4 6 后序遍歷:3 2

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu):二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    朋友們、伙計(jì)們,我們又見面了,本期來給大家解讀一下鏈?zhǔn)蕉鏄涞南嚓P(guān)知識(shí)點(diǎn),如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! 數(shù)據(jù)結(jié)構(gòu)與算法專欄 :數(shù)據(jù)結(jié)構(gòu)與算法 個(gè)? 人? 主? 頁 :stackY、 C 語 言 專 欄 :C語言:從入門到精通 目錄 前言

    2024年02月07日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    ??作者簡介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識(shí)C進(jìn)階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點(diǎn)贊 ?? 收藏 ? 加關(guān)注哦!?? ???????樹這一概念,在我們剛開始聽說的時(shí)候會(huì)覺得

    2024年01月20日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹,二叉樹,滿二叉樹,完全二叉樹的定義和二叉樹的基本操作

    【數(shù)據(jù)結(jié)構(gòu)】樹,二叉樹,滿二叉樹,完全二叉樹的定義和二叉樹的基本操作

    ??專欄【數(shù)據(jù)結(jié)構(gòu)】 ??喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 ??音樂分享【勛章】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問題?? 目錄 ?樹 ??????定義 ???????注意 ??樹的基本術(shù)語 ?二叉樹 ??????定義 ??二叉樹和樹的區(qū)別 ??????二叉樹

    2024年02月05日
    瀏覽(85)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹的順序結(jié)構(gòu)--堆

    數(shù)據(jù)結(jié)構(gòu):二叉樹的順序結(jié)構(gòu)--堆

    朋友們、伙計(jì)們,我們又見面了,本期來給大家解讀一下二叉樹--堆的相關(guān)知識(shí)點(diǎn),如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄:數(shù)據(jù)結(jié)構(gòu) 個(gè)? 人? 主? 頁 :stackY、 目錄 前言: 1.堆的概念及

    2024年02月06日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)-堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)-堆

    普通的二叉樹是不適合用數(shù)組來存儲(chǔ)的,因?yàn)榭赡軙?huì)存在大量的空間浪費(fèi)。而 完全二叉樹 更適合使用順序結(jié)構(gòu)存儲(chǔ)。 現(xiàn)實(shí)中我們通常把堆(一種二叉樹)使用順序結(jié)構(gòu)的數(shù)組來存儲(chǔ),需要注意的是這里的堆和操作系統(tǒng)虛擬進(jìn)程地址空間中的堆是兩回事,一個(gè)是數(shù)據(jù)結(jié)構(gòu),一個(gè)

    2024年02月09日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)】

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、二叉樹的存儲(chǔ)結(jié)構(gòu) 二、二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實(shí)現(xiàn) 2.1手動(dòng)構(gòu)建一課樹 2.2二叉樹的遍歷 三、二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實(shí)現(xiàn) 3.1前序遍歷(遞歸) 3.2中序遍歷(遞歸) 3.3后序遍歷(遞歸) 3.4層序遍歷(非遞

    2024年02月03日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu) —— 二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu) —— 二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)】

    樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。 把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓臉?,也就是說它是根朝上,而葉朝下的。 1.有一個(gè) 特殊的結(jié)點(diǎn),稱為根結(jié)點(diǎn) ,根節(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn) 2.除根節(jié)點(diǎn)外, 其余結(jié)點(diǎn)被分成M(M0)個(gè)互不相交

    2024年02月05日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的概念及結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的概念及結(jié)構(gòu)

    ??write in front?? ??所屬專欄: 初階數(shù)據(jù)結(jié)構(gòu) ???博客主頁:睿睿的博客主頁 ???代碼倉庫:??VS2022_C語言倉庫 ??您的點(diǎn)贊、關(guān)注、收藏、評論,是對我最大的激勵(lì)和支持?。?! 關(guān)注我,關(guān)注我,關(guān)注我 , 你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容??! 樹是一種 非線性的數(shù)據(jù)結(jié)構(gòu)

    2023年04月23日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包