Skip to content

Commit a719a1b

Browse files
author
limitsy
committed
二叉树遍历
1 parent 636d6d1 commit a719a1b

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

notes/数据结构与算法.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,116 @@ private static int searchDfs(int[] data, int l, int r, int target) {
174174

175175
#### 深度优先遍历(前序、中序、后序遍历)
176176

177+
```C++
178+
/**
179+
* 前序遍历 非递归实现
180+
* Definition for a binary tree node.
181+
* struct TreeNode {
182+
* int val;
183+
* TreeNode *left;
184+
* TreeNode *right;
185+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
186+
* };
187+
*/
188+
class Solution {
189+
public:
190+
vector<int> preorderTraversal(TreeNode* root) {
191+
vector<int> ans;
192+
TreeNode* node = root;
193+
stack<TreeNode*> s;
194+
map<TreeNode*, bool> M;
195+
if(node != NULL) {
196+
s.push(node);
197+
while (!s.empty()) {
198+
node = s.top();
199+
if (!M[node]) {
200+
ans.push_back(node->val);
201+
M[node] = true;
202+
}
203+
if (node->left != NULL) {
204+
s.push(node->left);
205+
node->left = NULL;
206+
} else if (node->right != NULL) {
207+
s.push(node->right);
208+
node->right = NULL;
209+
} else {
210+
s.pop();
211+
}
212+
}
213+
}
214+
return ans;
215+
}
216+
};
217+
```
218+
219+
```c++
220+
/**
221+
* 中序遍历
222+
* Definition for a binary tree node.
223+
* struct TreeNode {
224+
* int val;
225+
* TreeNode *left;
226+
* TreeNode *right;
227+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
228+
* };
229+
*/
230+
class Solution {
231+
public:
232+
vector<int> inorderTraversal(TreeNode* root) {
233+
vector<int> ans;
234+
if(root != NULL) {
235+
traversal(root, ans);
236+
}
237+
return ans;
238+
}
239+
240+
void traversal(TreeNode* node, vector<int> &ans) {
241+
if(node->left != NULL) {
242+
traversal(node->left, ans);
243+
}
244+
ans.push_back(node->val);
245+
if(node->right != NULL) {
246+
traversal(node->right, ans);
247+
}
248+
}
249+
};
250+
```
251+
252+
253+
254+
```c++
255+
/**
256+
* 后序遍历
257+
* Definition for a binary tree node.
258+
* struct TreeNode {
259+
* int val;
260+
* TreeNode *left;
261+
* TreeNode *right;
262+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
263+
* };
264+
*/
265+
class Solution {
266+
public:
267+
vector<int> postorderTraversal(TreeNode* root) {
268+
vector<int> ans;
269+
if(root != NULL) {
270+
traversal(root, ans);
271+
}
272+
return ans;
273+
}
274+
275+
void traversal(TreeNode* node, vector<int> &ans) {
276+
if(node->left != NULL) {
277+
traversal(node->left, ans);
278+
}
279+
if(node->right != NULL) {
280+
traversal(node->right, ans);
281+
}
282+
ans.push_back(node->val);
283+
}
284+
};
285+
```
286+
177287
#### 广度优先遍历(层序遍历)
178288

179289
### 5. AVL树

0 commit comments

Comments
 (0)