@@ -174,6 +174,116 @@ private static int searchDfs(int[] data, int l, int r, int target) {
174
174
175
175
#### 深度优先遍历(前序、中序、后序遍历)
176
176
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
+
177
287
#### 广度优先遍历(层序遍历)
178
288
179
289
### 5. AVL树
0 commit comments