首页 > 其他分享 >257. 二叉树的所有路径 Golang实现

257. 二叉树的所有路径 Golang实现

时间:2024-11-21 18:11:31浏览次数:1  
标签:nil res 节点 Golang 二叉树 回溯 path root 257

题目描述:

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。

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

思路分析:

这个题一眼回溯,回溯和递归其实也是紧密相关的。
1.确定回溯函数的参数 (1.root 2.一个路径 3. 所有路径)
2.回溯条件:到达叶子节点(左右孩子都为nil)
3.单层处理条件:左孩子进了后右孩子进。
这里需要注意的是有一个递归就对应了一个回溯。同时不用显式进行回溯的原因是不是因为path并没有采用地址传递,而是拷贝,每次到达回溯的结束条件,进行返回的时候,path的值就是进入回溯之前的path值
先看代码:

点击查看代码
func binaryTreePaths(root *TreeNode) []string {
   res := []string{}
   path := []int{}
    if root == nil {
        return res
    }
    traveralRoot(root,path,&res)
    return res
}

//不用显式进行回溯的原因是不是因为path并没有采用地址传递,而是拷贝,每次到达回溯的结束条件,进行返回的时候,path的值就是进入回溯之前的path值

func traveralRoot(root *TreeNode,path []int,res *[]string)  {
    path = append(path, root.Val)
    // 递归终止条件: 到达叶子节点
    if root.Left == nil && root.Right == nil {
        // 构建路径字符串
        pathStr := fmt.Sprintf("%d", path[0]) // 初始化字符串
        for i := 1; i < len(path); i++ {
            pathStr = fmt.Sprintf("%s->%d", pathStr, path[i]) // 连接字符串
        }
        *res = append(*res, pathStr) // 将路径加入结果集
        return
    }
//    3.递归访问左子树
    if root.Left!= nil {
        traveralRoot(root.Left,path,res)
    }
    if root.Right!= nil {
        traveralRoot(root.Right,path,res)
    }
}

标签:nil,res,节点,Golang,二叉树,回溯,path,root,257
From: https://www.cnblogs.com/CharlseGo/p/18561225

相关文章

  • 144. 二叉树的遍历「前序、中序、后序」 Golang实现
    题目描述:给你二叉树的根节点root,返回它节点值的前序遍历。思路分析:递归法:前序遍历的顺序是中左右的顺序。那么每个子树都是这个顺序,所以可以使用递归进行遍历。递归遍历有3部曲 1.确定递归函数的参数和返回值。 因为返回值要求保存在一个数组中,所以递归函数的参数应该......
  • 第 24 章 -Golang 性能优化
    在Go语言中进行性能优化是一个多方面的过程,它涉及到代码编写、编译器优化、运行时系统调优以及对应用程序的深入理解。以下是针对Golang性能优化的一些关键点,包括性能分析工具、内存管理和并发优化等方面的内容,并附带一些简单的案例源代码。性能分析工具Go语言自带了强大......
  • 代码随想录——二叉树19.最大二叉树
    递归最容易想到,采用先序遍历。1.遍历数组,找出当前区间的最大值;2.使用该最大值作为根节点;3.对数组的左半部分和右半部分递归调用构建最大二叉树。这种方式是标准的分治法,每次递归都需要遍历当前区间,找到最大值。因此,时间复杂度是O(n^2),因为每一层递归都会遍历一遍数组,且递......
  • 使用minikube快速搭建一个简单的golang微服务访问
    先在宿主机的docker下载一下golang的最新镜像dockerpullgolang:test写个简单的服务器,监听7878端口,请求都返回hello,worldpackagemainimport("fmt""net/http""os")funcmain(){fmt.Println("startmain")http.HandleFunc(&q......
  • 数据结构在二叉树中用子问题思路来解决问题
    二叉树Oj题获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N)二叉树的遍历判断是否是对称的二叉......
  • golang如何实现单例
    在Go语言中实现单例模式通常有几种方法。单例模式的目的是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。下面是几种常见的实现方式:1.基于包级别的变量(懒汉式)这是最简单的一种实现方式,通过在包初始化时创建单例对象。1packagesingleton23import"sync"......
  • 数据结构/第五章 树与二叉树/数据结构习题/树与二叉树的习题/考研/期末复习
    一、选择题1.一棵树中,所有结点的度数之和为n,则该树共有(    )个结点。A.n-1   B.n   C.n+1   D.无法确定2.高度为4的3叉树至多有(    )个结点。A.6   B.27   C.40   D.803.度为m的树中第6层至多有(    ......
  • 力扣 LeetCode 111. 二叉树的最小深度(Day7:二叉树)
     解题思路:用后序遍历题目要求的最小深度为根节点到叶子节点的最小深度,注意是到根节点,所以如图所示假设(没有9这个节点)是需要返回3的,而不是1(根节点左子树为空的情况),于是需要加两层判断其余部分可参考求最大深度的思路,有一定相似之处classSolution{publicintminDe......
  • 【PTA】求二叉树的右视图
    1.题目描述将二叉树的“右视图”定义为从二叉树右侧能看到的所有结点从上到下排列形成的序列。如下图所示的二叉树,其右视图就是{A,C,I,H}。 二叉树中的数据元素为单个字符,且各不相同,取值范围为A~Z或a~z之间的字符,二叉树不为空。在第3次上机“二叉树的建立和遍历”......
  • golang 压缩编译
    编译Go应用程序gobuild-ldflags="-s-w"-omyapp.exe.使用UPX压缩可执行文件(window下载并设置环境变量)upx--best--lzmamyapp.exe 可从10M压缩到1M @echooffREMSetGoenvironmentvariablessetCGO_ENABLED=0setGOOS=linuxsetGOARCH=armsetG......