mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 15:09:40 +08:00
0257.二叉树的所有路径 排版格式修复
This commit is contained in:
@ -18,9 +18,11 @@
|
||||
示例:
|
||||

|
||||
|
||||
# 思路
|
||||
## 算法公开课
|
||||
|
||||
**《代码随想录》算法视频公开课:[递归中带着回溯,你感受到了没?| 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<Object> 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 {
|
||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||
</a>
|
||||
|
||||
|
Reference in New Issue
Block a user