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

【C++】102.二叉樹(shù)的層序遍歷

這篇具有很好參考價(jià)值的文章主要介紹了【C++】102.二叉樹(shù)的層序遍歷。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

題目描述

  • 給你二叉樹(shù)的根節(jié)點(diǎn) root ,返回其節(jié)點(diǎn)值的 層序遍歷 。 (即逐層地,從左到右訪(fǎng)問(wèn)所有節(jié)點(diǎn))。

示例1:

【C++】102.二叉樹(shù)的層序遍歷,Leetcode/牛客網(wǎng),c++,數(shù)據(jù)結(jié)構(gòu),二叉樹(shù)

輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[9,20],[15,7]]

示例 2:

輸入:root = [1]
輸出:[[1]]

示例 3:

輸入:root = []
輸出:[]

提示:

  • 樹(shù)中節(jié)點(diǎn)數(shù)目在范圍 [0, 2000] 內(nèi)
  • -1000 <= Node.val <= 1000

思路分析

這個(gè)問(wèn)題實(shí)際上可以只用一個(gè)隊(duì)列就實(shí)現(xiàn),只需要再增加一個(gè)變量levelSize,用來(lái)記錄每一層的數(shù)據(jù)個(gè)數(shù),然后再讓這個(gè)隊(duì)列一層一層的出去。之前的方法中,實(shí)際上隊(duì)列并不是一層一層出去的,它有可能隊(duì)列里面同時(shí)有兩層的數(shù)據(jù),我們以下面這個(gè)圖來(lái)解釋一下原因:

【C++】102.二叉樹(shù)的層序遍歷,Leetcode/牛客網(wǎng),c++,數(shù)據(jù)結(jié)構(gòu),二叉樹(shù)

如果有兩層隊(duì)列實(shí)現(xiàn)的話(huà),3這個(gè)節(jié)點(diǎn)出來(lái)的時(shí)候,會(huì)讓920這兩個(gè)節(jié)點(diǎn)進(jìn)入隊(duì)列,而9這個(gè)節(jié)點(diǎn)出來(lái)的時(shí)候會(huì)讓15這個(gè)節(jié)點(diǎn)進(jìn)入隊(duì)列,這個(gè)時(shí)候隊(duì)列里面就同時(shí)有了第2層和第3層的數(shù)據(jù)。

所以我們想通過(guò)levelSize來(lái)達(dá)到一個(gè)目的:控制這個(gè)隊(duì)列實(shí)現(xiàn)一層一層的出去。

那我們要怎么實(shí)現(xiàn)呢?我們?nèi)匀灰詣偛诺膱D來(lái)進(jìn)行分析:

3節(jié)點(diǎn)進(jìn)入隊(duì)列的時(shí)候,它的層數(shù)為1,由于它是根節(jié)點(diǎn),所以它肯定只有一個(gè),所以3就可以直接出隊(duì)列。這個(gè)時(shí)候我們讓levelSize進(jìn)行自減操作它就變成了0,表示這一層已經(jīng)出完了。

那么由于3節(jié)點(diǎn)出的時(shí)候會(huì)把920也帶進(jìn)來(lái),也就是說(shuō)當(dāng)前層的節(jié)點(diǎn)全部出隊(duì)列的時(shí)候一定是下一層的節(jié)點(diǎn)全部進(jìn)入隊(duì)列,這個(gè)時(shí)候我們將levelSize重新更新為第二層節(jié)點(diǎn)的數(shù)目也就是2,然后再進(jìn)行出隊(duì)列的操作:9節(jié)點(diǎn)出隊(duì)列同時(shí)將15節(jié)點(diǎn)帶進(jìn)隊(duì)列,然后levelSize自減變?yōu)?code>1;20節(jié)點(diǎn)出隊(duì)列同時(shí)將15節(jié)點(diǎn)和7節(jié)點(diǎn)帶進(jìn)隊(duì)列,levelSize再自減變?yōu)?code>0。這個(gè)時(shí)候就說(shuō)明第二層也出完了。那么此時(shí)第三層都在隊(duì)列里面所以我們?cè)俅胃?code>levelSize的值為3,依次類(lèi)推直到整棵樹(shù)都被遍歷完就實(shí)現(xiàn)了只用一個(gè)隊(duì)列實(shí)現(xiàn)層序遍歷。

那么根據(jù)以上的思路,我們就可以寫(xiě)出下面的代碼:

完整代碼

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode*> q;
        int levelSize = 0;
        if (root)//如果根不為空,就入隊(duì)列
        {
            q.push(root);
            levelSize = 1;
        }

        vector<vector<int>> vv;//用來(lái)存放一層一層出的節(jié)點(diǎn)
        while (!q.empty())//如果隊(duì)列不等于空,就說(shuō)明樹(shù)還沒(méi)有被遍歷完
        {
            //通過(guò)levelSize控制一層一層出
            vector<int> v;//用來(lái)存放每一層的數(shù)據(jù)
            while (levelSize--)//levelSize是幾循環(huán)就執(zhí)行幾次,--levelSize表示的則是執(zhí)行(levelSize - 1)次
            {
                TreeNode* front = q.front();//先取隊(duì)頭的數(shù)據(jù)
                q.pop();
                v.push_back(front->val);
                //進(jìn)去的同時(shí)把該節(jié)點(diǎn)的下一層往隊(duì)列里面帶

                if (front->left)//左如果不為空就讓左入隊(duì)列
                    q.push(front->left);

                if (front->right)//右如果不為空就讓右入隊(duì)列
                    q.push(front->right);

            }
            //走到這里就說(shuō)明當(dāng)前層已經(jīng)出完了,就把當(dāng)前層所出的數(shù)據(jù)放到vv里面
            vv.push_back(v);
            //更新下一層的數(shù)據(jù)
            levelSize = q.size();
        }

        return vv;
    }
};

運(yùn)行結(jié)果
【C++】102.二叉樹(shù)的層序遍歷,Leetcode/??途W(wǎng),c++,數(shù)據(jù)結(jié)構(gòu),二叉樹(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-838606.html

到了這里,關(guān)于【C++】102.二叉樹(shù)的層序遍歷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • ★102. 二叉樹(shù)的層序遍歷

    ★102. 二叉樹(shù)的層序遍歷

    很巧妙的,又學(xué)習(xí)了一種層次遍歷的方法, 就是說(shuō)根據(jù)當(dāng)前的隊(duì)列的長(zhǎng)度去遍歷,遍歷的當(dāng)前隊(duì)列的長(zhǎng)度就是該層次的節(jié)點(diǎn)個(gè)數(shù)。

    2024年02月05日
    瀏覽(25)
  • 每日一題 102二叉樹(shù)的層序遍歷

    給你二叉樹(shù)的根節(jié)點(diǎn) root ,返回其節(jié)點(diǎn)值的 層序遍歷 。 (即逐層地,從左到右訪(fǎng)問(wèn)所有節(jié)點(diǎn))。 示例 1: 輸入:root = [3,9,20,null,null,15,7] 輸出:[[3],[9,20],[15,7]] 示例 2: 輸入:root = [1] 輸出:[[1]] 示例 3: 輸入:root = [] 輸出:[] 提示: 樹(shù)中節(jié)點(diǎn)數(shù)目在范圍 [0, 2000] 內(nèi) -1000 =

    2024年02月09日
    瀏覽(22)
  • 代碼隨想錄Day12 二叉樹(shù) LeetCode T102二叉樹(shù)的層序遍歷 T226 翻轉(zhuǎn)二叉樹(shù) T101 對(duì)稱(chēng)二叉樹(shù)

    代碼隨想錄Day12 二叉樹(shù) LeetCode T102二叉樹(shù)的層序遍歷 T226 翻轉(zhuǎn)二叉樹(shù) T101 對(duì)稱(chēng)二叉樹(shù)

    本文思路和詳細(xì)講解來(lái)自于:代碼隨想錄 (programmercarl.com) 題目鏈接:102. 二叉樹(shù)的層序遍歷 - 力扣(LeetCode) 本題使用隊(duì)列輔助完成,講解主要函數(shù)CheckOrder:首先判斷root是否為空,是就直接返回,然后創(chuàng)建隊(duì)列,向里加入root元素,計(jì)算隊(duì)列的長(zhǎng)度,也就是每一層的元素個(gè)數(shù),while循環(huán),si

    2024年02月06日
    瀏覽(19)
  • 每日一練:LeeCode-102、二又樹(shù)的層序遍歷【二叉樹(shù)】

    每日一練:LeeCode-102、二又樹(shù)的層序遍歷【二叉樹(shù)】

    本文是力扣LeeCode-102、二又樹(shù)的層序遍歷 學(xué)習(xí)與理解過(guò)程,本文僅做學(xué)習(xí)之用,對(duì)本題感興趣的小伙伴可以出門(mén)左拐LeeCode。 給你二叉樹(shù)的根節(jié)點(diǎn) root ,返回其節(jié)點(diǎn)值的 層序遍歷 。 ( 即逐層地,從左到右訪(fǎng)問(wèn)所有節(jié)點(diǎn) )。 示例 1: 輸入:root = [3,9,20,null,null,15,7] 輸出:[[3

    2024年01月21日
    瀏覽(22)
  • LeetCode.107. 二叉樹(shù)的層序遍歷 II

    LeetCode.107. 二叉樹(shù)的層序遍歷 II

    107. 二叉樹(shù)的層序遍歷 II 這個(gè)題目考查的是二叉樹(shù)的層序遍歷,對(duì)于二叉樹(shù)的層序遍歷,我們需要借助 隊(duì)列 這種數(shù)據(jù)結(jié)構(gòu)。再來(lái)回歸本題 ,我們只需要將 二叉樹(shù)的層序遍歷的結(jié)果逆序,就可以得到這道題我們要求的答案了。接下來(lái)我們的難題就是 如何實(shí)現(xiàn)二叉樹(shù)的層序遍

    2024年02月21日
    瀏覽(30)
  • leetcode做題筆記107. 二叉樹(shù)的層序遍歷 II

    leetcode做題筆記107. 二叉樹(shù)的層序遍歷 II

    給你二叉樹(shù)的根節(jié)點(diǎn)? root ?,返回其節(jié)點(diǎn)值? 自底向上的層序遍歷 ?。 (即按從葉子節(jié)點(diǎn)所在層到根節(jié)點(diǎn)所在的層,逐層從左向右遍歷) 本題要求二叉樹(shù)的層序遍歷,并且是從下至上的層序遍歷,可以考慮先按照從上至下的層序遍歷先將層序遍歷結(jié)果放到數(shù)組中,再對(duì)每層

    2024年02月11日
    瀏覽(26)
  • 【Py/Java/C++三種語(yǔ)言詳解】LeetCode每日一題240216【二叉樹(shù)BFS】LeetCode103、二叉樹(shù)的層序遍歷II

    【Py/Java/C++三種語(yǔ)言詳解】LeetCode每日一題240216【二叉樹(shù)BFS】LeetCode103、二叉樹(shù)的層序遍歷II

    有LeetCode交流群/華為OD考試扣扣交流群可加: 948025485 可上全網(wǎng)獨(dú)家的 歐弟OJ系統(tǒng) 練習(xí)華子OD、大廠真題 綠色聊天軟件戳 od1336 了解算法沖刺訓(xùn)練 LeetCode103、二叉樹(shù)的鋸齒形層序遍歷 給你二叉樹(shù)的根節(jié)點(diǎn) root ,返回其節(jié)點(diǎn)值的 鋸齒形層序遍歷 。(即先從左往右,再?gòu)挠彝筮M(jìn)

    2024年02月20日
    瀏覽(19)
  • 41 二叉樹(shù)的層序遍歷

    41 二叉樹(shù)的層序遍歷

    給你二叉樹(shù)的根節(jié)點(diǎn) root ,返回其節(jié)點(diǎn)值的 層序遍歷 。 (即逐層地,從左到右訪(fǎng)問(wèn)所有節(jié)點(diǎn))。 提示: 樹(shù)中節(jié)點(diǎn)數(shù)目在范圍 [0, 2000] 內(nèi) -1000 = Node.val = 1000

    2024年02月07日
    瀏覽(23)
  • 二叉樹(shù)題目:二叉樹(shù)的層序遍歷 II

    二叉樹(shù)題目:二叉樹(shù)的層序遍歷 II

    標(biāo)題:二叉樹(shù)的層序遍歷 II 出處:107. 二叉樹(shù)的層序遍歷 II 4 級(jí) 要求 給你二叉樹(shù)的根結(jié)點(diǎn) root texttt{root} root ,返回其結(jié)點(diǎn)值自底向上的層序遍歷(即從左到右,按從葉結(jié)點(diǎn)所在層到根結(jié)點(diǎn)所在層逐層遍歷)。 示例 示例 1: 輸入: root ? = ? [3,9,20,null,null,15,7] texttt{root = [3

    2024年02月11日
    瀏覽(23)
  • 算法進(jìn)階——求二叉樹(shù)的層序遍歷

    算法進(jìn)階——求二叉樹(shù)的層序遍歷

    題目 給定一個(gè)二叉樹(shù),返回該二叉樹(shù)層序遍歷的結(jié)果,(從左到右,一層一層地遍歷)。 例如: 給定的二叉樹(shù)是{3,9,20,#,#,15,7}, 該二叉樹(shù)層序遍歷的結(jié)果是 [ [3], [9,20], [15,7] ] 提示: 0 = 二叉樹(shù)的結(jié)點(diǎn)數(shù) = 1500 示例1 示例2 思路 利用輔助隊(duì)列,通過(guò)bfs(廣度優(yōu)先)算法遍歷二叉樹(shù)

    2024年01月24日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包