@@ -132,12 +132,158 @@ https://github.com/CarpenterLee/JCFInternals/blob/049c84bb65a3114ba4b8355d83c490
132
132
133
133
#### 二分查找法
134
134
135
- #### 二叉树遍历
135
+ 在有序表中,通过不断的二分判断mid与目标是否一致,并缩小目标所在区间。
136
136
137
- ### 4.. 二分搜索树
137
+ ** 代码实现**
138
+
139
+ ``` java
140
+ // 非递归实现
141
+ private static int search(int [] data, int l, int r, int target) {
142
+ int mid;
143
+ while (l < r) {
144
+ mid = (l + r) / 2 ;
145
+ if (data[mid] == target) {
146
+ return mid;
147
+ } else if (data[mid] < target) {
148
+ l = mid + 1 ;
149
+ } else {
150
+ r = mid;
151
+ }
152
+ }
153
+ return - 1 ;
154
+ }
155
+ // 递归实现
156
+ private static int searchDfs(int [] data, int l, int r, int target) {
157
+ if (l >= r) {
158
+ return - 1 ;
159
+ }
160
+ int mid = (l + r) / 2 ;
161
+ if (target == data[mid]) {
162
+ return mid;
163
+ } else if (target > data[mid]) {
164
+ return searchDfs(data, mid + 1 , r, target);
165
+ } else {
166
+ return searchDfs(data, l, mid, target);
167
+ }
168
+ }
169
+ ```
170
+
171
+ #####
172
+
173
+ ### 4.. 二叉树遍历
138
174
139
175
#### 深度优先遍历(前序、中序、后序遍历)
140
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
+
141
287
#### 广度优先遍历(层序遍历)
142
288
143
289
### 5. AVL树
0 commit comments