257 二叉树的所有路径-简单

题目:

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

叶子节点 是指没有子节点的节点。

分析:

深搜,记录了访问每个节点的路径,如果到达叶子结点,直接追加结果,并且返回时去掉当前结果;

如果不是叶子结点,继续深搜。

// date 2023/10/24
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func binaryTreePaths(root *TreeNode) []string {
    res := make([]string, 0, 16)
    path := make([]int, 0, 16)

    var dfs func(root *TreeNode)
    dfs = func(root *TreeNode) {
        if root == nil {
            return
        }
        path = append(path, root.Val)
        defer func() {
            path = path[:len(path)-1]
        }()
        if root.Left == nil && root.Right == nil {
            res = append(res, path2Str(path))
            return
        }
        if root.Left != nil {
            dfs(root.Left)
        }
        if root.Right != nil {
            dfs(root.Right)
        }
    }

    dfs(root)

    return res
}

func path2Str(nums []int) string {
    var res string
    for i, v := range nums {
        if i == 0 {
            res = fmt.Sprintf("%d", v)
        } else {
            res += fmt.Sprintf("->%d", v)
        }
    }
    return res
}

最后更新于