@@ -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