最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(102.二叉樹層序遍歷)

 更新時(shí)間:2021年07月21日 14:57:52   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(102.二叉樹層序遍歷),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 102. Binary Tree Level Order Traversal 二叉樹層序遍歷

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
/ \
9  20
/  \
15   7

return its level order traversal as:

[
[3],
[9,20],
[15,7]
]

層序遍歷二叉樹是典型的廣度優(yōu)先搜索 BFS 的應(yīng)用,但是這里稍微復(fù)雜一點(diǎn)的是,要把各個(gè)層的數(shù)分開,存到一個(gè)二維向量里面,大體思路還是基本相同的,建立一個(gè) queue,然后先把根節(jié)點(diǎn)放進(jìn)去,這時(shí)候找根節(jié)點(diǎn)的左右兩個(gè)子節(jié)點(diǎn),這時(shí)候去掉根節(jié)點(diǎn),此時(shí) queue 里的元素就是下一層的所有節(jié)點(diǎn),用一個(gè) for 循環(huán)遍歷它們,然后存到一個(gè)一維向量里,遍歷完之后再把這個(gè)一維向量存到二維向量里,以此類推,可以完成層序遍歷,參見代碼如下:

解法一:

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if (!root) return {};
        vector<vector<int>> res;
        queue<TreeNode*> q{{root}};
        while (!q.empty()) {
            vector<int> oneLevel;
            for (int i = q.size(); i > 0; --i) {
                TreeNode *t = q.front(); q.pop();
                oneLevel.push_back(t->val);
                if (t->left) q.push(t->left);
                if (t->right) q.push(t->right);
            }
            res.push_back(oneLevel);
        }
        return res;
    }
};

下面來看遞歸的寫法,核心就在于需要一個(gè)二維數(shù)組,和一個(gè)變量 level,關(guān)于 level 的作用可以參見博主的另一篇博客 Binary Tree Level Order Traversal II 中的講解,參見代碼如下:

解法二:

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        levelorder(root, 0, res);
        return res;
    }
    void levelorder(TreeNode* node, int level, vector<vector<int>>& res) {
        if (!node) return;
        if (res.size() == level) res.push_back({});
        res[level].push_back(node->val);
        if (node->left) levelorder(node->left, level + 1, res);
        if (node->right) levelorder(node->right, level + 1, res);
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/102

類似題目:

Binary Tree Level Order Traversal II

Binary Tree Zigzag Level Order Traversal

Minimum Depth of Binary Tree

Binary Tree Vertical Order Traversal 

Average of Levels in Binary Tree

N-ary Tree Level Order Traversal

參考資料:

https://leetcode.com/problems/binary-tree-level-order-traversal/

https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/33445/Java-Solution-using-DFS

https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/33450/Java-solution-with-a-queue-used

https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/114449/A-general-approach-to-level-order-traversal-questions-in-Java

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(102.二叉樹層序遍歷)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)二叉樹層序遍歷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++之try catch 異常處理入門實(shí)例

    C++之try catch 異常處理入門實(shí)例

    我們通常希望自己編寫的程序能夠在異常的情況下也能作出相應(yīng)的處理,而不至于程序莫名其妙地中斷或者中止運(yùn)行了。在設(shè)計(jì)程序時(shí)應(yīng)充分考慮各種異常情況,并加以處理
    2018-01-01
  • C++實(shí)現(xiàn)下載的代碼

    C++實(shí)現(xiàn)下載的代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)下載的代碼,以下載百度圖片為例較為完整的講述了C++下載的具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • 淺談C語言編程中程序的一些基本的編寫優(yōu)化技巧

    淺談C語言編程中程序的一些基本的編寫優(yōu)化技巧

    這篇文章主要介紹了C語言編程中程序的一些基本的編寫優(yōu)化技巧,文中涉及到了基礎(chǔ)的C程序內(nèi)存方面的知識,非常推薦!需要的朋友可以參考下
    2016-02-02
  • C++實(shí)現(xiàn)簡易萬年歷

    C++實(shí)現(xiàn)簡易萬年歷

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易萬年歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++中atof?函數(shù)的介紹

    C++中atof?函數(shù)的介紹

    這篇文章主要給大家分享的是C++中atof?函數(shù)的介紹,在?stdlib.h?中?atof?函數(shù),可用于將?char?字符串轉(zhuǎn)為?float?/?double?浮點(diǎn)數(shù)類型,想具體了解語法的小伙伴可以參考下面文章的內(nèi)容,希望對大家有所幫助
    2021-11-11
  • c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會(huì)在該處完成初始化,并且初始化的順序和其在聲明時(shí)的順序是一致的,與列表的先后順序無關(guān)
    2013-09-09
  • Qt6安裝教程(使用國內(nèi)源)

    Qt6安裝教程(使用國內(nèi)源)

    本文主要介紹了Qt6安裝教程(使用國內(nèi)源),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++實(shí)現(xiàn)打印1到最大的n位數(shù)

    C++實(shí)現(xiàn)打印1到最大的n位數(shù)

    這篇文章主要介紹了C++實(shí)現(xiàn)打印1到最大的n位數(shù),并分析了實(shí)現(xiàn)代碼中語句的跳轉(zhuǎn)技巧,需要的朋友可以參考下
    2014-09-09
  • C語言學(xué)習(xí)筆記之字符串間的那些事

    C語言學(xué)習(xí)筆記之字符串間的那些事

    字符串是C語言中最重要的數(shù)據(jù)類型之一,最近借助《C Primer Plus》一書來學(xué)習(xí)C中的常用字符串操作,在此作為筆記記錄,下面這篇文章主要給大家介紹了C語言學(xué)習(xí)筆記之字符串間的那些事,需要的朋友可以參考下
    2022-04-04
  • Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目(圖文教程)

    Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目(圖文教程)

    這篇文章主要介紹了Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目,Visual Studio 2019是完全免費(fèi)的,而且安裝比較簡單,現(xiàn)在把安裝步驟分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-03-03

最新評論

秦皇岛市| 霍林郭勒市| 瓮安县| 阿合奇县| 寿光市| 会昌县| 金湖县| 基隆市| 开化县| 孟村| 兴义市| 南皮县| 天水市| 烟台市| 中江县| 内江市| 承德市| 德庆县| 清水县| 女性| 集安市| 济南市| 临泉县| 兴安县| 马山县| 开封县| 紫阳县| 天镇县| 深泽县| 潞城市| 仲巴县| 黑龙江省| 江西省| 临江市| 固安县| 巴塘县| 金湖县| 普定县| 浪卡子县| 乌兰察布市| 昭通市|