二叉树的所有路径

本文最后更新于:2022年11月30日 晚上

每日一题

二叉树的所有路径

跳转链接

二叉树的所有路径

二叉树的解题思路:

  1. 确定终止条件
  2. 确定递归姿势
  3. 递归条件

这里需要获取二叉树的所有路径,案例:

image-20221117163806253

一个空节点的所有路径就是空的,而一个不存在子节点的节点的所有路径就是它自己。按照这个我们就可以确定终止条件了

因为是要获取二叉树的所有路径,那么肯定是先使用根节点了,所有使用的是前序遍历

我们想象一下只有三个节点如何获取所有路径呢?拿根节点加上左右节点的所有路径就可以啦,也就是1->2,1->3。这也就是它的递归条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 获取二叉树的所有路径,只需要把当前节点加上左右即可
func binaryTreePaths(root *TreeNode) []string {
// 终止条件
if root == nil {
return nil
}
if root.Right == nil && root.Left == nil {
return []string{strconv.Itoa(root.Val)}
}

// 使用当前节点
var res = make([]string, 0, 2)
// 左节点递归
if root.Left != nil {
treePaths := binaryTreePaths(root.Left)
for _, path := range treePaths {
res = append(res, fmt.Sprintf("%d->%s", root.Val, path))
}
}
// 右节点递归
if root.Right != nil {
treePaths := binaryTreePaths(root.Right)
// 拼接路径
for _, path := range treePaths {
res = append(res, fmt.Sprintf("%d->%s", root.Val, path))
}
}

return res
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!