JZ24 二叉树中和为某一值的路径

二叉树中和为某一值的路径

输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

 解题思路: 递归回溯的解法

1.按照前序方式去遍历(根,左,右)
2.递归处理:

  • 忽略空节点
  • 递归过程中去修改sum的结果,一旦发现等于0同时是根节点则返回结果
  • 回溯就是每次先插入当前节点,递归完成后删除
 
func FindPath( root *TreeNode ,  target int ) [][]int {
    // write code here
    res := make([][]int, 0)
    path := make([]int, 0)

    if root == nil {
        return res
    }

    dfs(root, target, &path, &res)
    return res
}

func dfs(root *TreeNode, target int, path *[]int, res *[][]int) {
    if root == nil {
        return
    }

    *path = append(*path, root.Val)
    target = target - root.Val

    if target == 0  && root.Left == nil && root.Right == nil{
        tmp := make([]int, len(*path))
        copy(tmp, *path)
        *res = append(*res, tmp)
        // *path = make([]int, 0)
        // return
    }
   
    dfs(root.Left, target, path, res)
    dfs(root.Right, target, path, res)

    *path = (*path)[:len(*path) - 1]
}

  

 
posted @ 2021-04-09 01:15  zqlucky  阅读(68)  评论(0编辑  收藏  举报