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

C++實(shí)現(xiàn)LeetCode(112.二叉樹的路徑和)

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

[LeetCode] 112. Path Sum 二叉樹的路徑和

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

Note: A leaf is a node with no children.

Example:

Given the below binary tree and sum = 22,

      5
/ \
4   8
/   / \
11  13  4
/  \      \
7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

這道題給了一棵二叉樹,問是否存在一條從跟結(jié)點(diǎn)到葉結(jié)點(diǎn)到路徑,使得經(jīng)過到結(jié)點(diǎn)值之和為一個(gè)給定的 sum 值,這里需要用深度優(yōu)先算法 DFS 的思想來遍歷每一條完整的路徑,也就是利用遞歸不停找子結(jié)點(diǎn)的左右子結(jié)點(diǎn),而調(diào)用遞歸函數(shù)的參數(shù)只有當(dāng)前結(jié)點(diǎn)和 sum 值。首先,如果輸入的是一個(gè)空結(jié)點(diǎn),則直接返回 false,如果如果輸入的只有一個(gè)根結(jié)點(diǎn),則比較當(dāng)前根結(jié)點(diǎn)的值和參數(shù) sum 值是否相同,若相同,返回 true,否則 false。 這個(gè)條件也是遞歸的終止條件。下面就要開始遞歸了,由于函數(shù)的返回值是 Ture/False,可以同時(shí)兩個(gè)方向一起遞歸,中間用或 || 連接,只要有一個(gè)是 True,整個(gè)結(jié)果就是 True。遞歸左右結(jié)點(diǎn)時(shí),這時(shí)候的 sum 值應(yīng)該是原 sum 值減去當(dāng)前結(jié)點(diǎn)的值,參見代碼如下:

解法一:

class Solution {
public:
    bool hasPathSum(TreeNode* root, int sum) {
        if (!root) return false;
        if (!root->left && !root->right && root->val == sum ) return true;
        return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
    }
};

我們也可以使用迭代的寫法,這里用的也是先序遍歷的迭代寫法,先序遍歷二叉樹,左右子結(jié)點(diǎn)都需要加上其父結(jié)點(diǎn)值,這樣當(dāng)遍歷到葉結(jié)點(diǎn)時(shí),如果和 sum 相等了,那么就說明一定有一條從 root 過來的路徑。注意這里不必一定要先處理右子結(jié)點(diǎn),調(diào)換下順序也是可以的,因?yàn)椴徽撌窍刃虮闅v的根-左-右,還是根-右-左,并不會(huì)影響到找路徑,參見代碼如下:

解法二:

class Solution {
public:
    bool hasPathSum(TreeNode* root, int sum) {
        if (!root) return false;
        stack<TreeNode*> st{{root}};
        while (!st.empty()) {
            TreeNode *t = st.top(); st.pop();
            if (!t->left && !t->right) {
                if (t->val == sum) return true;
            }
            if (t->right) {
                t->right->val += t->val;
                st.push(t->right);
            }
            if (t->left) {
                t->left->val += t->val;
                st.push(t->left);
            }
        }
        return false;
    }
};

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

相關(guān)文章

  • c++11多線程編程之std::async的介紹與實(shí)例

    c++11多線程編程之std::async的介紹與實(shí)例

    這篇文章主要給大家介紹了關(guān)于c++11多線程編程之std::async的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++輸出斐波那契數(shù)列的兩種實(shí)現(xiàn)方法

    C++輸出斐波那契數(shù)列的兩種實(shí)現(xiàn)方法

    以下是對(duì)C++中輸出斐波那契數(shù)列的兩種實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-10-10
  • C語言中程序如何調(diào)用Python腳本

    C語言中程序如何調(diào)用Python腳本

    由于python有很多功能強(qiáng)大的開源庫(kù),有時(shí)候在寫C語言程序的時(shí)候又想利用一下python強(qiáng)大的模塊,那么C語言中程序如何調(diào)用Python腳本,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言中的指針 初階

    C語言中的指針 初階

    這篇文章主要介紹的是關(guān)于初級(jí)階段學(xué)習(xí)C語言中指針的一些內(nèi)容,那就是指針是什么?簡(jiǎn)單的說,就是通過它能找到以它為地址的內(nèi)存單元。下面文章我們就來詳細(xì)介紹該內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • C BlowFish對(duì)稱加密算法詳解

    C BlowFish對(duì)稱加密算法詳解

    這篇文章主要介紹了C BlowFish對(duì)稱加密算法詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++空類及沒有成員變量的類的大小實(shí)例分析

    C++空類及沒有成員變量的類的大小實(shí)例分析

    這篇文章主要介紹了C++空類及沒有成員變量的類的大小,對(duì)于初學(xué)者更好的了解C++的指針及類的存儲(chǔ)結(jié)構(gòu)很有幫助,需要的朋友可以參考下
    2014-07-07
  • QT中start()和startTimer()的區(qū)別小結(jié)

    QT中start()和startTimer()的區(qū)別小結(jié)

    QTimer提供了定時(shí)器信號(hào)和單觸發(fā)定時(shí)器,本文主要介紹了QT中start()和startTimer()的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類的詳細(xì)過程

    C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類的詳細(xì)過程

    C++中將string封裝為單獨(dú)的類,string?類是?C++?標(biāo)準(zhǔn)庫(kù)中的一個(gè)非常重要的類,用于表示和操作字符串,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類,需要的朋友可以參考下
    2024-08-08
  • C++ XML庫(kù)用法詳解

    C++ XML庫(kù)用法詳解

    TinyXML-2是C++中一個(gè)輕量級(jí)、易于使用的XML解析庫(kù),支持XML的讀取和寫入,內(nèi)存占用小,適合嵌入式系統(tǒng),本文給大家介紹C++ XML庫(kù)用法,感興趣的朋友一起看看吧
    2025-03-03
  • 關(guān)于C++中sort()函數(shù)的用法,你搞明白了沒

    關(guān)于C++中sort()函數(shù)的用法,你搞明白了沒

    這篇文章主要介紹了關(guān)于C++中sort()函數(shù)的用法,并通過三種方法介紹了按降序排列的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

封丘县| 沾化县| 淮阳县| 苍山县| 阿荣旗| 黄大仙区| 五峰| 澜沧| 丹东市| 台东县| 阿合奇县| 广安市| 四子王旗| 滦平县| 沾化县| 静安区| 澄城县| 衡山县| 关岭| 桑日县| 虎林市| 河池市| 施秉县| 化德县| 安图县| 马尔康县| 琼中| 虹口区| 隆尧县| 五台县| 河东区| 玉田县| 西乡县| 宁晋县| 福泉市| 许昌县| 西乌珠穆沁旗| 辽中县| 虎林市| 马龙县| 弋阳县|