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

Go Java算法之二叉樹的所有路徑示例詳解

 更新時間:2022年08月18日 09:16:02   作者:黃丫丫  
這篇文章主要為大家介紹了Go Java算法之二叉樹的所有路徑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

二叉樹的所有路徑

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

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

  • 示例 1:

輸入:root = [1,2,3,null,5]

輸出:["1->2->5","1->3"]

  • 示例 2:

輸入:root = [1]

輸出:["1"]  

提示:

樹中節(jié)點的數(shù)目在范圍 [1, 100] 內(nèi)

-100 <= Node.val <= 100

方法一:深度優(yōu)先遍歷搜索(Java)

最直觀的方法是使用深度優(yōu)先搜索。在深度優(yōu)先搜索遍歷二叉樹時,我們需要考慮當前的節(jié)點以及它的孩子節(jié)點。

如果當前節(jié)點不是葉子節(jié)點,則在當前的路徑末尾添加該節(jié)點,并繼續(xù)遞歸遍歷該節(jié)點的每一個孩子節(jié)點。

如果當前節(jié)點是葉子節(jié)點,則在當前路徑末尾添加該節(jié)點后我們就得到了一條從根節(jié)點到葉子節(jié)點的路徑,將該路徑加入到答案即可。

遞歸二步曲:

(1) 找出重復的子問題。

  • 前序遍歷的順序是:根節(jié)點、左子樹、右子樹。
  • 在本題同樣也是這個順序:將根節(jié)點加入路徑,遞歸左子樹,遞歸右子樹。
  • 對于左子樹和右子樹來說,也都是同樣的操作。

(2) 確定終止條件。

對于二叉樹的所有路徑中的每條路徑,當遍歷到葉子節(jié)點的時候為當前路徑的結束。并且將當前路徑加入結果集。

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> paths = new ArrayList<String>();
        constructPaths(root, "", paths);
        return paths;
    }
    public void constructPaths(TreeNode root, String path, List<String> paths) {
        if (root != null) {
            StringBuffer pathSB = new StringBuffer(path);
            pathSB.append(Integer.toString(root.val));
            if (root.left == null && root.right == null) {  // 當前節(jié)點是葉子節(jié)點
                paths.add(pathSB.toString());  // 把路徑加入到答案中
            } else {
                pathSB.append("->");  // 當前節(jié)點不是葉子節(jié)點,繼續(xù)遞歸遍歷
                constructPaths(root.left, pathSB.toString(), paths);
                constructPaths(root.right, pathSB.toString(), paths);
            }
        }
    }
}

時間復雜度:O(N^2)

空間復雜度:O(N^2)

方法二:廣度優(yōu)先遍歷(Go)

我們也可以用廣度優(yōu)先搜索來實現(xiàn)。

  • 我們維護一個隊列,存儲節(jié)點以及根到該節(jié)點的路徑。一開始這個隊列里只有根節(jié)點。
  • 在每一步迭代中,我們?nèi)〕鲫犃兄械氖坠?jié)點
  • 如果它是葉子節(jié)點,則將它對應的路徑加入到答案中。如果它不是葉子節(jié)點,則將它的所有孩子節(jié)點加入到隊列的末尾。
  • 當隊列為空時廣度優(yōu)先搜索結束
func binaryTreePaths(root *TreeNode) []string {
    paths := []string{}
    if root == nil {
        return paths
    }
    nodeQueue := []*TreeNode{}
    pathQueue := []string{}
    nodeQueue = append(nodeQueue, root)
    pathQueue = append(pathQueue, strconv.Itoa(root.Val))
    for i := 0; i < len(nodeQueue); i++ {
        node, path := nodeQueue[i], pathQueue[i]
        if node.Left == nil && node.Right == nil {
            paths = append(paths, path)
            continue
        }
        if node.Left != nil {
            nodeQueue = append(nodeQueue, node.Left)
            pathQueue = append(pathQueue, path + "->" + strconv.Itoa(node.Left.Val))
        }
        if node.Right != nil {
            nodeQueue = append(nodeQueue, node.Right)
            pathQueue = append(pathQueue, path + "->" + strconv.Itoa(node.Right.Val))
        }
    }
    return paths
}

時間復雜度:O(N^2)

空間復雜度:O(N^2)

以上就是Go Java算法之二叉樹的所有路徑示例詳解的詳細內(nèi)容,更多關于Go Java算法二叉樹所有路徑的資料請關注腳本之家其它相關文章!

相關文章

  • golang使用信號量熱更新的實現(xiàn)示例

    golang使用信號量熱更新的實現(xiàn)示例

    這篇文章主要介紹了golang使用信號量熱更新的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • golang中select語句的簡單實例

    golang中select語句的簡單實例

    Go的select語句是一種僅能用于channl發(fā)送和接收消息的專用語句,此語句運行期間是阻塞的,下面這篇文章主要給大家介紹了關于golang中select語句的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Go語言共享內(nèi)存讀寫實例分析

    Go語言共享內(nèi)存讀寫實例分析

    這篇文章主要介紹了Go語言共享內(nèi)存讀寫方法,實例分析了共享內(nèi)存的原理與讀寫技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言七篇入門教程四通道及Goroutine

    Go語言七篇入門教程四通道及Goroutine

    這篇文章主要為大家介紹了Go語言的通道及Goroutine示例詳解,本文是Go語言七篇入門系列篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Go語言中緩沖bufio的原理解讀與應用實戰(zhàn)

    Go語言中緩沖bufio的原理解讀與應用實戰(zhàn)

    Go語言標準庫中的bufio包提供了帶緩沖的I/O操作,它通過封裝io.Reader和io.Writer接口,減少頻繁的I/O操作,提高讀寫效率,本文就來詳細的介紹一下,感興趣的可以學習
    2024-10-10
  • 詳解Go中Map類型和Slice類型的傳遞

    詳解Go中Map類型和Slice類型的傳遞

    這篇文章主要為大家詳細介紹了Go中Map類型和Slice類型的傳遞,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Go語言基于viper的conf庫進行配置文件解析

    Go語言基于viper的conf庫進行配置文件解析

    在現(xiàn)代軟件開發(fā)中,配置文件是不可或缺的一部分,如何高效地將這些格式解析到 Go 結構體中,一直是開發(fā)者的痛點,下面我們來看看如何使用conf進行配置文件解析吧
    2025-03-03
  • 使用go操作redis的有序集合(zset)

    使用go操作redis的有序集合(zset)

    這篇文章主要介紹了使用go操作redis的有序集合(zset),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go 實現(xiàn)基于Token 的登錄流程深度分析

    Go 實現(xiàn)基于Token 的登錄流程深度分析

    Token 認證機制的核心思想是,服務端在用戶登錄時生成一個 Token,客戶端在后續(xù)的請求中攜帶這個 Token,服務端通過驗證 Token 的有效性來確認用戶的身份,本文將帶你深入探索基于 Token 的登錄流程,這是一種更為靈活且適用于現(xiàn)代應用架構的認證方式
    2024-03-03
  • 淺析golang如何在多線程中避免CPU指令重排

    淺析golang如何在多線程中避免CPU指令重排

    這篇文章主要為大家詳細介紹了golang在多線程中避免CPU指令重排的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論

汉中市| 定远县| 宜兴市| 长治县| 兴国县| 兰州市| 巴林右旗| 社会| 洛宁县| 兴山县| 邵东县| 宜州市| 广汉市| 油尖旺区| 宁陵县| 安阳县| 利津县| 巨野县| 漯河市| 乌拉特前旗| 大足县| 微山县| 阿图什市| 深水埗区| 夹江县| 峡江县| 高淳县| 芦山县| 奉化市| 紫阳县| 乡城县| 乐东| 疏附县| 建德市| 岗巴县| 孟津县| 英吉沙县| 聂荣县| 阿拉善左旗| 曲周县| 克什克腾旗|