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

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

 更新時間:2021年07月15日 10:18:49   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(144.二叉樹的先序遍歷),本篇文章通過簡要的案例,講解了該項技術(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?

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

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

2. 循環(huán)檢測棧是否為空,若不空,則取出棧頂元素,保存其值,然后看其右子節(jié)點是否存在,若存在則 push 到棧中。再看其左子節(jié)點,若存在,則 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;
    }
};

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

解法二:

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++實現(xiàn)LeetCode(144.二叉樹的先序遍歷)的文章就介紹到這了,更多相關(guān)C++實現(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ù)組、鏈表與哈希表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C語言中g(shù)etchar()的原理以及易錯點解析

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

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

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

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

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

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

    Mingw64編譯wxWidgets 3.0.2常見錯誤分析

    這篇文章主要介紹了Mingw64編譯wxWidgets 3.0.2常見錯誤分析,需要的朋友可以參考下
    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)之算法的時間復(fù)雜度

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

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

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

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

最新評論

平原县| 武汉市| 扎赉特旗| 沿河| 明水县| 忻州市| 平顶山市| 壶关县| 兴业县| 高淳县| 海林市| 石嘴山市| 南雄市| 类乌齐县| 简阳市| 泰来县| 周宁县| 江门市| 观塘区| 双城市| 海城市| 固镇县| 桐城市| 泰和县| 中牟县| 太仓市| 闸北区| 中西区| 渭南市| 剑阁县| 桐庐县| 斗六市| 泸溪县| 寻乌县| 长兴县| 错那县| 德惠市| 沾益县| 舒城县| 杂多县| 池州市|