257. 二叉树的所有路径 简单
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
代码参考:
package main
import (
"fmt"
"strings"
)
func main() {
root := &TreeNode{Val: 1}
root.Left = &TreeNode{Val: 2}
root.Left.Right = &TreeNode{Val: 5}
root.Right = &TreeNode{Val: 3}
// 1
// / \
// 2 3
// \
// 5
fmt.Println(binaryTreePaths(root)) // [1->2->5 1->3]
}
func binaryTreePaths(root *TreeNode) []string {
var paths [][]int
traverse(root, nil, &paths)
var res []string
for _, path := range paths {
res = append(res, strings.Trim(strings.Replace(fmt.Sprint(path), " ", "->", -1), "[]")) // cool simple code
}
return res
}
// 和 113 一样,递归取经
func traverse(root *TreeNode, curPath []int, paths *[][]int) {
if root == nil {
return
}
curPath = append(curPath, root.Val)
if root.Left == nil && root.Right == nil {
*paths = append(*paths, curPath)
return
}
lPath := make([]int, len(curPath))
copy(lPath, curPath)
rPath := make([]int, len(curPath))
copy(rPath, curPath)
traverse(root.Left, lPath, paths)
traverse(root.Right, rPath, paths)
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng