题解 | #二叉树中和为某一值的路径(二)#

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

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @param target int整型 
 * @return int整型二维数组
*/
func FindPath( root *TreeNode ,  target int ) [][]int {
    // write code here
  	// 最终的结果切片
    ans := [][]int{}
  	// 存放路径
    path := []int{}
	// 深度优先遍历
    var dfs func(*TreeNode, int) 
    dfs = func(node *TreeNode, target int) {
	  	// 遍历到叶子结点直接返回
        if node == nil {
            return
        }
		// 处理当前节点
        target -= node.Val
        path = append(path, node.Val)
	  	// 如果添加了该节点后满足题目要求(路径必须以叶子节点结尾)
        if node.Left == nil && node.Right == nil && target == 0 {
		  	// path 地址是不变的,不能将 path 直接添加给 ans,否则所有结果中的路径最后都是一样的
            temp := make([]int, len(path))
            copy(temp, path)
            ans = append(ans, temp)
        }
		// 继续处理左右孩子,即使是叶子节点也要走完这个流程,成功将节点弹出 path
        dfs(node.Left, target)
        dfs(node.Right, target)
	  	// 回溯
        path = path[:len(path)-1]
    }

    dfs(root, target)

    return ans
}

全部评论

相关推荐

冲鸭2024:亚信不去也罢
投递亚信科技(中国)有限公司等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务