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

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

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
}

全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了 ,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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