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

C++實(shí)現(xiàn)LeetCode(144.二叉樹的先序遍歷)

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

[LeetCode] 144. Binary Tree Preorder Traversal 二叉樹的先序遍歷

Given a binary tree, return the preorder traversal of its nodes' values.

Example:

Input: 

[1,null,2,3]

1
\
2
/
3

Output: 

[1,2,3]

Follow up: Recursive solution is trivial, could you do it iteratively?

一般我們提到樹的遍歷,最常見的有先序遍歷,中序遍歷,后序遍歷和層序遍歷,它們用遞歸實(shí)現(xiàn)起來都非常的簡單。而題目的要求是不能使用遞歸求解,于是只能考慮到用非遞歸的方法,這就要用到stack來輔助運(yùn)算。由于先序遍歷的順序是"根-左-右", 算法為:

1. 把根節(jié)點(diǎn) push 到棧中

2. 循環(huán)檢測棧是否為空,若不空,則取出棧頂元素,保存其值,然后看其右子節(jié)點(diǎn)是否存在,若存在則 push 到棧中。再看其左子節(jié)點(diǎn),若存在,則 push 到棧中。

參見代碼如下:

解法一:

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        if (!root) return {};
        vector<int> res;
        stack<TreeNode*> s{{root}};
        while (!s.empty()) {
            TreeNode *t = s.top(); s.pop();
            res.push_back(t->val);
            if (t->right) s.push(t->right);
            if (t->left) s.push(t->left);
        }
        return res;
    }
};

下面這種寫法使用了一個(gè)輔助結(jié)點(diǎn)p,這種寫法其實(shí)可以看作是一個(gè)模版,對應(yīng)的還有中序和后序的模版寫法,形式很統(tǒng)一,方便于記憶。輔助結(jié)點(diǎn)p初始化為根結(jié)點(diǎn),while 循環(huán)的條件是棧不為空或者輔助結(jié)點(diǎn)p不為空,在循環(huán)中首先判斷如果輔助結(jié)點(diǎn)p存在,那么先將p加入棧中,然后將p的結(jié)點(diǎn)值加入結(jié)果 res 中,此時(shí)p指向其左子結(jié)點(diǎn)。否則如果p不存在的話,表明沒有左子結(jié)點(diǎn),取出棧頂結(jié)點(diǎn),將p指向棧頂結(jié)點(diǎn)的右子結(jié)點(diǎn),參見代碼如下:

解法二:

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode*> st;
        TreeNode *p = root;
        while (!st.empty() || p) {
            if (p) {
                st.push(p);
                res.push_back(p->val);
                p = p->left;
            } else {
                p = st.top(); st.pop();
                p = p->right;
            }
        }
        return res;
    }
};

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

相關(guān)文章

  • 利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    這篇文章主要為大家介紹了如何利用Matlab繪制超好看的旋轉(zhuǎn)九邊形。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程

    C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程,包括函數(shù)指針作為參數(shù)來傳遞等重要知識,需要的朋友可以參考下
    2016-04-04
  • C++中的數(shù)組、鏈表與哈希表

    C++中的數(shù)組、鏈表與哈希表

    這篇文章主要介紹了C++中的數(shù)組、鏈表與哈希表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C語言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    C語言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    用getchar()函數(shù)讀取字符串時(shí),字符串會存儲在輸入緩沖區(qū)中,包括輸入的回車字符,下面這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C語言編程實(shí)例之輸出指定圖形問題

    C語言編程實(shí)例之輸出指定圖形問題

    這篇文章主要介紹了C語言編程實(shí)例之輸出指定圖形問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Qt與Web混合開發(fā)實(shí)現(xiàn)雙向通信的示例

    Qt與Web混合開發(fā)實(shí)現(xiàn)雙向通信的示例

    本文主要介紹了Qt與Web混合開發(fā)實(shí)現(xiàn)雙向通信的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析

    Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析

    這篇文章主要介紹了Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析,需要的朋友可以參考下
    2016-11-11
  • C++ Primer 標(biāo)準(zhǔn)庫vector示例詳解

    C++ Primer 標(biāo)準(zhǔn)庫vector示例詳解

    該文章主要介紹了C++標(biāo)準(zhǔn)庫中的vector類型,包括其定義、初始化、成員函數(shù)以及常見操作,文章詳細(xì)解釋了如何使用vector來存儲和操作對象集合,并提供了代碼示例來說明vector的使用方法,感興趣的朋友一起看看吧
    2025-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    C語言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度,文章基于c語言的相關(guān)資料展開詳細(xì)介紹,具有一定的參價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • c++中string類型和int類型相互轉(zhuǎn)換的幾種常用方法

    c++中string類型和int類型相互轉(zhuǎn)換的幾種常用方法

    我們在編寫程序時(shí),經(jīng)常涉及到int與string之間的類型轉(zhuǎn)換,本文主要介紹了c++中string類型和int類型相互轉(zhuǎn)換的幾種常用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評論

庆云县| 岗巴县| 蒲城县| 昌平区| 长葛市| 瑞安市| 鹤庆县| 昌江| 丹东市| 翁源县| 专栏| 漳州市| 桃江县| 水城县| 三门县| 彭阳县| 曲水县| 瑞丽市| 荣昌县| 南召县| 枞阳县| 汪清县| 西丰县| 禄劝| 陵水| 珠海市| 商丘市| 乌兰县| 大冶市| 冀州市| 岚皋县| 金华市| 大竹县| 讷河市| 板桥市| 合阳县| 临汾市| 龙海市| 常宁市| 庄浪县| 荃湾区|