国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode刷題--- 二叉樹的所有路徑

這篇具有很好參考價值的文章主要介紹了LeetCode刷題--- 二叉樹的所有路徑。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

個人主頁:元清加油_【C++】,【C語言】,【數(shù)據(jù)結(jié)構(gòu)與算法】-CSDN博客

個人專欄

力扣遞歸算法題 ? ? ? 【 ? ? 】
【C++】 ? ? ? ? ? ? ? ? ?【 ? 】
數(shù)據(jù)結(jié)構(gòu)與算法 ? ? ? 【 ? ?】


前言:這個專欄主要講述遞歸遞歸、搜索與回溯算法,所以下面題目主要也是這些算法做的 ?

我講述題目會把講解部分分為3個部分:
1、題目解析

2、算法原理思路講解

3、代碼實現(xiàn)


二叉樹的所有路徑

題目鏈接:二叉樹的所有路徑

題目

給你一個二叉樹的根節(jié)點?root?,按?任意順序?,返回所有從根節(jié)點到葉子節(jié)點的路徑。

葉子節(jié)點?是指沒有子節(jié)點的節(jié)點。

示例 1:

LeetCode刷題--- 二叉樹的所有路徑,力扣遞歸算法題,leetcode,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-804942.html

輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]

示例 2:

輸入:root = [1]
輸出:["1"]

提示:

  • 樹中節(jié)點的數(shù)目在范圍?[1, 100]?內(nèi)
  • -100 <= Node.val <= 10

解法

題目解析

題目意思很簡單,給我們一顆二叉樹,讓我們返回二叉樹所有的路徑

例如:

LeetCode刷題--- 二叉樹的所有路徑,力扣遞歸算法題,leetcode,算法

輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]

算法原理思路講解???

算法思路
使?深度優(yōu)先遍歷(DFS)求解。
路徑以字符串形式存儲,從根節(jié)點開始遍歷,每次遍歷時將當(dāng)前節(jié)點的值加?到路徑中,如果該節(jié)點為葉?節(jié)點,將路徑存儲到結(jié)果中。否則,將 "->" 加?到路徑中并遞歸遍歷該節(jié)點的左右?樹。
定義?個結(jié)果數(shù)組,進?遞歸。遞歸具體實現(xiàn)?法如下:
  1. 如果當(dāng)前節(jié)點不為空,就將當(dāng)前節(jié)點的值加?路徑 path 中,否則直接返回;
  2. 判斷當(dāng)前節(jié)點是否為葉?節(jié)點,如果是,則將當(dāng)前路徑加?到所有路徑的存儲數(shù)組 ret?中
  3. 否則,將當(dāng)前節(jié)點值加上 "->" 作為路徑的分隔符,繼續(xù)遞歸遍歷當(dāng)前節(jié)點的左右?節(jié)點。


?代碼實現(xiàn)?

  • 時間復(fù)雜度:O(N^2),其中 N 表示節(jié)點數(shù)目。在深度優(yōu)先搜索中每個節(jié)點會被訪問一次且只會被訪問一次,每一次會對 path 變量進行拷貝構(gòu)造,時間代價為 O(N),故時間復(fù)雜度為 O(N^2)。
  • 空間復(fù)雜度:O(N^2),其中 N 表示節(jié)點數(shù)目。除答案數(shù)組外我們需要考慮遞歸調(diào)用的棧空間。在最壞情況下,當(dāng)二叉樹中每個節(jié)點只有一個孩子節(jié)點時,即整棵二叉樹呈一個鏈狀,此時遞歸的層數(shù)為 NNN.
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution 
    {
    public:
        vector<string> ret;
    
        void dfs(TreeNode* root , string path)
        {
            if (root != nullptr)
                path += to_string(root->val);
            else
                return ;
            
            if(root->left == nullptr && root->right == nullptr)
            {
                ret.push_back(path);
                return;
            }
            path += "->";
            if(root->left) dfs(root->left, path);
            if(root->right) dfs(root->right, path);
        }
    
        vector<string> binaryTreePaths(TreeNode* root) 
        {
            string path;
            if(root == nullptr) 
                return ret;
    
            dfs(root,path);
            return ret;
        }
    };

到了這里,關(guān)于LeetCode刷題--- 二叉樹的所有路徑的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包