做好每一件事,读好每一本书,天道酬勤
二叉树的所有路径
2022-01-14 / 3 min read

关于二叉树的所有路径的题目,这里我们是用递归的思想写出来的题目

题目

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
示例 2:

输入:root = [1]
输出:["1"]

思路

我们这里使用的是递归的思想,也就是递归的三步骤,我们按照三步骤逐步的向下写

解题过程

首先我们思考第一步

定义函数确定返回值和输入值

func(node *TreeNode,path string)
这里传入的值是节点,然后和路径

确定终止条件

这的终止条件有些不一样,开始写的时候,我写的条件是

if root == nil{
    ...
}

显然这里的题目条件没有这么简单,所以我们这里需要注意一下这里的条件 ,因为如果是我之前书写的条件,那么我们后面就会有一大堆的判断,显然是不合理的。所以我们这里要思考一些终止条件。
我们知道,我们路径终止的条件是什么,是节点左右节点都为空,所以我们的终止条件就来了。

if (node.Left ==nil && node.Right == nil){

上面就是我们的终止条件

单层逻辑

这里的单层逻辑就不过多的赘述,我们直接上代码

  if (node.Left ==nil && node.Right == nil){
              s  := path + strconv.Itoa(node.Val)
              res = append(res,s)
              return
          }
          path = path + strconv.Itoa(node.Val) + "->"
          if node.Left != nil{
             allpath(node.Left,path)
          }
          if node.Right != nil{
              allpath(node.Right,path)
          }

最终题目代码

func binaryTreePaths(root *TreeNode) []string { 
      var res []string
      var allpath func(node *TreeNode,path string)
      allpath = func(node *TreeNode,path string){
          if (node.Left ==nil && node.Right == nil){
              s  := path + strconv.Itoa(node.Val)
              res = append(res,s)
              return
          }
          path = path + strconv.Itoa(node.Val) + "->"
          if node.Left != nil{
             allpath(node.Left,path)
          }
          if node.Right != nil{
              allpath(node.Right,path)
          }
      }
      allpath(root,"")
      return res
}