diff --git a/problems/0257.二叉树的所有路径.md b/problems/0257.二叉树的所有路径.md index 06153507..44c0fd85 100644 --- a/problems/0257.二叉树的所有路径.md +++ b/problems/0257.二叉树的所有路径.md @@ -18,9 +18,11 @@ 示例: ![257.二叉树的所有路径1](https://code-thinking-1253855093.file.myqcloud.com/pics/2021020415161576.png) -# 思路 +## 算法公开课 -**《代码随想录》算法视频公开课:[递归中带着回溯,你感受到了没?| LeetCode:257. 二叉树的所有路径](https://www.bilibili.com/video/BV1ZG411G7Dh),相信结合视频在看本篇题解,更有助于大家对本题的理解**。 +**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)::[递归中带着回溯,你感受到了没?| LeetCode:257. 二叉树的所有路径](https://www.bilibili.com/video/BV1ZG411G7Dh),相信结合视频在看本篇题解,更有助于大家对本题的理解**。 + +## 思路 这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。 @@ -32,7 +34,7 @@ 我们先使用递归的方式,来做前序遍历。**要知道递归和回溯就是一家的,本题也需要回溯。** -## 递归 +### 递归 1. 递归函数参数以及返回值 @@ -305,7 +307,7 @@ public: **综合以上,第二种递归的代码虽然精简但把很多重要的点隐藏在了代码细节里,第一种递归写法虽然代码多一些,但是把每一个逻辑处理都完整的展现出来了。** -## 拓展 +### 拓展 这里讲解本题解的写法逻辑以及一些更具体的细节,下面的讲解中,涉及到C++语法特性,如果不是C++的录友,就可以不看了,避免越看越晕。 @@ -328,7 +330,7 @@ public: 所以,第一个代码版本中,我才使用 vector 类型的path,这样方便给大家演示代码中回溯的操作。 vector类型的path,不管 每次 路径收集的数字是几位数,总之一定是int,所以就一次 pop_back就可以。 -## 迭代法 +### 迭代法 至于非递归的方式,我们可以依然可以使用前序遍历的迭代方式来模拟遍历路径的过程,对该迭代方式不了解的同学,可以看文章[二叉树:听说递归能做的,栈也能做!](https://programmercarl.com/二叉树的迭代遍历.html)和[二叉树:前中后序迭代方式统一写法](https://programmercarl.com/二叉树的统一迭代法.html)。 @@ -368,7 +370,7 @@ public: ``` 当然,使用java的同学,可以直接定义一个成员变量为object的栈`Stack stack = new Stack<>();`,这样就不用定义两个栈了,都放到一个栈里就可以了。 -# 总结 +## 总结 **本文我们开始初步涉及到了回溯,很多同学过了这道题目,可能都不知道自己其实使用了回溯,回溯和递归都是相伴相生的。** @@ -380,13 +382,9 @@ public: 对于本题充分了解递归与回溯的过程之后,有精力的同学可以再去实现迭代法。 +## 其他语言版本 - - - -# 其他语言版本 - -## Java: +### Java: ```Java //解法一 @@ -492,9 +490,9 @@ class Solution { } ``` --- -## Python: - - +### Python: + + 递归法+回溯 ```Python # Definition for a binary tree node. @@ -552,7 +550,7 @@ class Solution: self.traversal(cur.right, path[:], result) ``` - + 递归法+隐形回溯(版本二) ```Python # Definition for a binary tree node. @@ -610,7 +608,7 @@ class Solution: --- -## Go: +### Go: 递归法: @@ -672,7 +670,7 @@ func binaryTreePaths(root *TreeNode) []string { ``` --- -## JavaScript: +### JavaScript: 递归法: @@ -725,7 +723,7 @@ var binaryTreePaths = function(root) { }; ``` -## TypeScript: +### TypeScript: > 递归法 @@ -779,7 +777,7 @@ function binaryTreePaths(root: TreeNode | null): string[] { }; ``` -## Swift: +### Swift: > 递归/回溯 ```swift @@ -846,7 +844,7 @@ func binaryTreePaths(_ root: TreeNode?) -> [String] { } ``` -## Scala: +### Scala: 递归: ```scala @@ -876,7 +874,7 @@ object Solution { } ``` -rust: +### Rust: ```rust // 递归 @@ -907,4 +905,3 @@ impl Solution { -