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

题目描述:

给你一个二叉树的根节点 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)
    }
}
posted @ 2024-11-21 17:52  wochh  阅读(6)  评论(0编辑  收藏  举报