二叉树的所有路径
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
}