欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

[LeetCode] 112. Path Sum 二叉樹(shù)的路徑和

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.

這道題給了一棵二叉樹(shù),問(wèn)是否存在一條從跟結(jié)點(diǎn)到葉結(jié)點(diǎn)到路徑,使得經(jīng)過(guò)到結(jié)點(diǎn)值之和為一個(gè)給定的 sum 值,這里需要用深度優(yōu)先算法 DFS 的思想來(lái)遍歷每一條完整的路徑,也就是利用遞歸不停找子結(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è)條件也是遞歸的終止條件。下面就要開(kāi)始遞歸了,由于函數(shù)的返回值是 Ture/False,可以同時(shí)兩個(gè)方向一起遞歸,中間用或 || 連接,只要有一個(gè)是 True,整個(gè)結(jié)果就是 True。遞歸左右結(jié)點(diǎn)時(shí),這時(shí)候的 sum 值應(yīng)該是原 sum 值減去當(dāng)前結(jié)點(diǎn)的值,參見(jià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);
    }
};

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

解法二:

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

相關(guān)文章

  • C語(yǔ)言最大公約數(shù)示例教程

    C語(yǔ)言最大公約數(shù)示例教程

    這篇文章主要為大家介紹了C語(yǔ)言最大公約數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • 關(guān)于數(shù)組做函數(shù)參數(shù)的問(wèn)題集合匯總

    關(guān)于數(shù)組做函數(shù)參數(shù)的問(wèn)題集合匯總

    本文是對(duì)關(guān)于數(shù)組做函數(shù)參數(shù)的問(wèn)題進(jìn)行了詳細(xì)的匯總,需要的朋友可以過(guò)來(lái)參考下。希望對(duì)大家有所幫助
    2013-10-10
  • C++11的for循環(huán)的新用法(推薦)

    C++11的for循環(huán)的新用法(推薦)

    C++11這次的更新帶來(lái)了令很多C++程序員期待已久的for range循環(huán),每次看到j(luò)avascript, lua里的for range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for range了。下面看下C++11的for循環(huán)的新用法
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看

    C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++的智能指針你真的了解嗎

    C++的智能指針你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的智能指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++設(shè)計(jì)模式之外觀模式

    C++設(shè)計(jì)模式之外觀模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之外觀模式,本文詳細(xì)講解了C++中的Facade模式,并給出了實(shí)例代碼,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)之連續(xù)存儲(chǔ)數(shù)組的算法

    C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)之連續(xù)存儲(chǔ)數(shù)組的算法

    這篇文章主要介紹了C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)之連續(xù)存儲(chǔ)數(shù)組的算法的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • c++如何使用openssl接口來(lái)生成隨機(jī)數(shù)

    c++如何使用openssl接口來(lái)生成隨機(jī)數(shù)

    OpenSSL是一個(gè)強(qiáng)大的加密庫(kù),不僅支持加密解密,還能生成隨機(jī)數(shù),設(shè)置過(guò)程包括下載資源文件、配置項(xiàng)目及修改屬性頁(yè)等步驟,確保庫(kù)文件正確包含,在Visual Studio中正確配置后,可使用RAND_bytes函數(shù)生成隨機(jī)數(shù),此過(guò)程需要注意文件路徑和附加目錄的設(shè)置
    2024-10-10
  • C++實(shí)現(xiàn)航空訂票程序

    C++實(shí)現(xiàn)航空訂票程序

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)航空訂票程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語(yǔ)言完美實(shí)現(xiàn)動(dòng)態(tài)數(shù)組代碼分享

    C語(yǔ)言完美實(shí)現(xiàn)動(dòng)態(tài)數(shù)組代碼分享

    本文給大家分享的是一則使用C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的代碼,完美解決內(nèi)存溢出以及內(nèi)存回收問(wèn)題,有需要的小伙伴可以參考下。
    2016-02-02

最新評(píng)論