Skip to content

Commit d4d0412

Browse files
committed
update: add 1 problem(0144) & rename 0094's code file name.
1 parent 738b463 commit d4d0412

8 files changed

+226
-2
lines changed

Codes/0094-binary-tree-inorder-traversal_20240210-recursionVersion.cpp renamed to Codes/0094-binary-tree-inorder-traversal_20240210-noneRecursionVersion.cpp

File renamed without changes.

Codes/0094-binary-tree-inorder-traversal_recursionVersion.py renamed to Codes/0094-binary-tree-inorder-traversal_noneRecursionVersion.py

File renamed without changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'''
2+
Author: LetMeFly
3+
Date: 2024-02-11 10:50:53
4+
LastEditors: LetMeFly
5+
LastEditTime: 2024-02-11 10:52:08
6+
'''
7+
from typing import List, Optional
8+
9+
# Definition for a binary tree node.
10+
class TreeNode:
11+
def __init__(self, val=0, left=None, right=None):
12+
self.val = val
13+
self.left = left
14+
self.right = right
15+
16+
class Solution:
17+
def dfs(self, root: Optional[TreeNode]) -> None:
18+
if not root:
19+
return
20+
self.ans.append(root.val)
21+
self.dfs(root.left)
22+
self.dfs(root.right)
23+
24+
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
25+
self.ans = []
26+
self.dfs(root)
27+
return self.ans
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2024-02-11 10:53:13
4+
* @LastEditors: LetMeFly
5+
* @LastEditTime: 2024-02-11 10:54:14
6+
*/
7+
#ifdef _WIN32
8+
#include "_[1,2]toVector.h"
9+
#endif
10+
11+
/**
12+
* Definition for a binary tree node.
13+
* struct TreeNode {
14+
* int val;
15+
* TreeNode *left;
16+
* TreeNode *right;
17+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
18+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
19+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
20+
* };
21+
*/
22+
class Solution {
23+
public:
24+
vector<int> preorderTraversal(TreeNode* root) {
25+
vector<int> ans;
26+
stack<TreeNode*> st;
27+
st.push(root);
28+
while (st.size()) {
29+
TreeNode* thisNode = st.top();
30+
st.pop();
31+
if (!thisNode) {
32+
continue;
33+
}
34+
ans.push_back(thisNode->val);
35+
st.push(thisNode->right);
36+
st.push(thisNode->left);
37+
}
38+
return ans;
39+
}
40+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2024-02-11 10:48:50
4+
* @LastEditors: LetMeFly
5+
* @LastEditTime: 2024-02-11 10:49:51
6+
*/
7+
#ifdef _WIN32
8+
#include "_[1,2]toVector.h"
9+
#endif
10+
11+
/**
12+
* Definition for a binary tree node.
13+
* struct TreeNode {
14+
* int val;
15+
* TreeNode *left;
16+
* TreeNode *right;
17+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
18+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
19+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
20+
* };
21+
*/
22+
class Solution { // 这次写的和2022-07-29的除了一个中括号一模一样hh
23+
private:
24+
vector<int> ans;
25+
26+
void dfs(TreeNode* root) {
27+
if (!root) {
28+
return;
29+
}
30+
ans.push_back(root->val);
31+
dfs(root->left);
32+
dfs(root->right);
33+
}
34+
public:
35+
vector<int> preorderTraversal(TreeNode* root) {
36+
dfs(root);
37+
return ans;
38+
}
39+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'''
2+
Author: LetMeFly
3+
Date: 2024-02-11 10:57:28
4+
LastEditors: LetMeFly
5+
LastEditTime: 2024-02-11 10:58:28
6+
'''
7+
from typing import List, Optional
8+
9+
# Definition for a binary tree node.
10+
class TreeNode:
11+
def __init__(self, val=0, left=None, right=None):
12+
self.val = val
13+
self.left = left
14+
self.right = right
15+
16+
class Solution:
17+
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
18+
ans = []
19+
st = [root]
20+
while st:
21+
thisNode = st.pop()
22+
if not thisNode:
23+
continue
24+
ans.append(thisNode.val)
25+
st.append(thisNode.right)
26+
st.append(thisNode.left)
27+
return ans

Solutions/LeetCode 0094.二叉树的中序遍历.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ tags: [题解, LeetCode, 简单, 栈, 树, 深度优先搜索, DFS, 二叉树,
5959
+ 时间复杂度$O(size(tree))$
6060
+ 空间复杂度$O(size(tree))$
6161

62+
更详细的描述可以参考[144. 前序遍历](https://leetcode.letmefly.xyz/2022/07/29/LeetCode%200144.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%89%8D%E5%BA%8F%E9%81%8D%E5%8E%86/)
63+
6264
### AC代码
6365

6466
#### C++

Solutions/LeetCode 0144.二叉树的前序遍历.md

Lines changed: 91 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ date: 2022-07-29 15:41:51
44
tags: [题解, LeetCode, 简单, 栈, 树, 深度优先搜索, 二叉树, 前序遍历, DFS]
55
---
66

7-
# 【LetMeFly】144.二叉树的前序遍历:二叉树必会题
7+
# 【LetMeFly】144.二叉树的前序遍历:二叉树必会题-递归/迭代(栈模拟递归)
88

99
力扣题目链接:[https://leetcode.cn/problems/binary-tree-preorder-traversal/](https://leetcode.cn/problems/binary-tree-preorder-traversal/)
1010

@@ -62,7 +62,7 @@ tags: [题解, LeetCode, 简单, 栈, 树, 深度优先搜索, 二叉树, 前序
6262

6363

6464

65-
## 方法一:DFS
65+
## 方法一:深度优先搜索DFS(递归)
6666

6767
前序遍历的遍历顺序是:
6868

@@ -113,5 +113,94 @@ public:
113113
};
114114
```
115115

116+
#### Python
117+
118+
```python
119+
# from typing import List, Optional
120+
121+
# # Definition for a binary tree node.
122+
# class TreeNode:
123+
# def __init__(self, val=0, left=None, right=None):
124+
# self.val = val
125+
# self.left = left
126+
# self.right = right
127+
128+
class Solution:
129+
def dfs(self, root: Optional[TreeNode]) -> None:
130+
if not root:
131+
return
132+
self.ans.append(root.val)
133+
self.dfs(root.left)
134+
self.dfs(root.right)
135+
136+
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
137+
self.ans = []
138+
self.dfs(root)
139+
return self.ans
140+
```
141+
142+
## 方法二:使用栈模拟递归(栈模拟递归)
143+
144+
使用栈模拟递归,具体做法可参考[94. 中序遍历](https://leetcode.letmefly.xyz/2024/02/10/LeetCode%200094.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E4%B8%AD%E5%BA%8F%E9%81%8D%E5%8E%86/#方法二:使用栈模拟递归(栈模拟递归))
145+
146+
与之不同的是,前序遍历需要存储的信息更少,因为遍历到当前节点后先处理当前节点才递归的。
147+
148+
因此,我们只需要将当前节点的右子、左子依次入栈即可。(出栈时为左子,右子)
149+
150+
+ 时间复杂度$O(N)$,其中$N$是二叉树节点的个数
151+
+ 空间复杂度$O(N)$
152+
153+
### AC代码
154+
155+
#### C++
156+
157+
```cpp
158+
class Solution {
159+
public:
160+
vector<int> preorderTraversal(TreeNode* root) {
161+
vector<int> ans;
162+
stack<TreeNode*> st;
163+
st.push(root);
164+
while (st.size()) {
165+
TreeNode* thisNode = st.top();
166+
st.pop();
167+
if (!thisNode) {
168+
continue;
169+
}
170+
ans.push_back(thisNode->val);
171+
st.push(thisNode->right);
172+
st.push(thisNode->left);
173+
}
174+
return ans;
175+
}
176+
};
177+
```
178+
179+
#### Python
180+
181+
```python
182+
# from typing import List, Optional
183+
184+
# # Definition for a binary tree node.
185+
# class TreeNode:
186+
# def __init__(self, val=0, left=None, right=None):
187+
# self.val = val
188+
# self.left = left
189+
# self.right = right
190+
191+
class Solution:
192+
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
193+
ans = []
194+
st = [root]
195+
while st:
196+
thisNode = st.pop()
197+
if not thisNode:
198+
continue
199+
ans.append(thisNode.val)
200+
st.append(thisNode.right)
201+
st.append(thisNode.left)
202+
return ans
203+
```
204+
116205
> 同步发文于CSDN,原创不易,转载请附上[原文链接](https://blog.tisfy.eu.org/2022/07/29/LeetCode%200144.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%89%8D%E5%BA%8F%E9%81%8D%E5%8E%86/)哦~
117206
> Tisfy:[https://letmefly.blog.csdn.net/article/details/126057536](https://letmefly.blog.csdn.net/article/details/126057536)

0 commit comments

Comments
 (0)