Skip to content

Commit 3f342c7

Browse files
committed
updated implementation and test cases
1 parent 5cd8d83 commit 3f342c7

File tree

3 files changed

+70
-115
lines changed

3 files changed

+70
-115
lines changed

Headers/0002_Tree/0001_BinarySearchTree.h

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include<vector>
34
#include<string>
45
using namespace std;
56
class Node
@@ -25,20 +26,20 @@ class BinarySearchTree
2526
Node* _FindPredecessorNode(Node* node);
2627
void _Transplant(Node* nodeU, Node* nodeV);
2728
void _DeleteNode(Node* node);
28-
string _RecursiveInorderTraversal(Node* node);
29-
string _RecursivePreorderTraversal(Node* node);
30-
string _RecursivePostorderTraversal(Node* node);
31-
string _MorrisInorderTraversal(Node* node);
32-
string _MorrisPreorderTraversal(Node* node);
33-
string _MorrisPostorderTraversal(Node* node);
29+
void _RecursiveInorderTraversal(Node* node, vector<int>& result);
30+
void _RecursivePreorderTraversal(Node* node, vector<int>& result);
31+
void _RecursivePostorderTraversal(Node* node, vector<int>& result);
32+
void _MorrisInorderTraversal(Node* node, vector<int>& result);
33+
void _MorrisPreorderTraversal(Node* node, vector<int>& result);
34+
void _MorrisPostorderTraversal(Node* node, vector<int>& result);
3435
public:
3536
BinarySearchTree();
3637
void InsertNode(int value);
3738
void DeleteNode(int value);
38-
string GetRecursiveInorderTravesalResult();
39-
string GetRecursivePreorderTravesalResult();
40-
string GetRecursivePostorderTravesalResult();
41-
string GetMorrisInorderTraversalResult();
42-
string GetMorrisPreorderTraversalResult();
43-
string GetMorrisPostorderTraversalResult();
39+
vector<int> GetRecursiveInorderTravesalResult();
40+
vector<int> GetRecursivePreorderTravesalResult();
41+
vector<int> GetRecursivePostorderTravesalResult();
42+
vector<int> GetMorrisInorderTraversalResult();
43+
vector<int> GetMorrisPreorderTraversalResult();
44+
vector<int> GetMorrisPostorderTraversalResult();
4445
};

SourceCodes/0002_Tree/0001_BinarySearchTree.cc

Lines changed: 48 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -164,86 +164,46 @@ void BinarySearchTree::_DeleteNode(Node* node)
164164
}
165165
}
166166

167-
string BinarySearchTree::_RecursiveInorderTraversal(Node* node)
167+
void BinarySearchTree::_RecursiveInorderTraversal(Node* node, vector<int>& result)
168168
{
169169
if (node == nullptr)
170170
{
171-
return "";
171+
return;
172172
}
173-
string leftSubTree = this->_RecursiveInorderTraversal(node->left);
174-
string currentNode = to_string(node->data);
175-
string rightSubTree = this->_RecursiveInorderTraversal(node->right);
176-
177-
string result = leftSubTree;
178-
if (!leftSubTree.empty())
179-
{
180-
result += " ";
181-
}
182-
result += currentNode;
183-
if (!rightSubTree.empty())
184-
{
185-
result += " ";
186-
}
187-
result += rightSubTree;
188-
return result;
173+
this->_RecursiveInorderTraversal(node->left, result);
174+
result.push_back(node->data);
175+
this->_RecursiveInorderTraversal(node->right, result);
189176
}
190177

191-
string BinarySearchTree::_RecursivePreorderTraversal(Node* node)
178+
void BinarySearchTree::_RecursivePreorderTraversal(Node* node, vector<int>& result)
192179
{
193180
if (node == nullptr)
194181
{
195-
return "";
196-
}
197-
string currentNode = to_string(node->data);
198-
string leftSubTree = this->_RecursivePreorderTraversal(node->left);
199-
string rightSubTree = this->_RecursivePreorderTraversal(node->right);
200-
201-
string result = currentNode;
202-
if (!leftSubTree.empty())
203-
{
204-
result += " ";
182+
return;
205183
}
206-
result += leftSubTree;
207-
if (!rightSubTree.empty())
208-
{
209-
result += " ";
210-
}
211-
result += rightSubTree;
212-
return result;
184+
result.push_back(node->data);
185+
this->_RecursivePreorderTraversal(node->left, result);
186+
this->_RecursivePreorderTraversal(node->right, result);
213187
}
214188

215-
string BinarySearchTree::_RecursivePostorderTraversal(Node* node)
189+
void BinarySearchTree::_RecursivePostorderTraversal(Node* node, vector<int>& result)
216190
{
217191
if (node == nullptr)
218192
{
219-
return "";
220-
}
221-
string leftSubTree = this->_RecursivePostorderTraversal(node->left);
222-
string rightSubTree = this->_RecursivePostorderTraversal(node->right);
223-
string currentNode = to_string(node->data);
224-
225-
string result = leftSubTree;
226-
if (!leftSubTree.empty())
227-
{
228-
result += " ";
229-
}
230-
result += rightSubTree;
231-
if (!rightSubTree.empty())
232-
{
233-
result += " ";
193+
return;
234194
}
235-
result += currentNode;
236-
return result;
195+
this->_RecursivePostorderTraversal(node->left, result);
196+
this->_RecursivePostorderTraversal(node->right, result);
197+
result.push_back(node->data);
237198
}
238199

239-
string BinarySearchTree::_MorrisInorderTraversal(Node* node)
200+
void BinarySearchTree::_MorrisInorderTraversal(Node* node, vector<int>& result)
240201
{
241-
string result = "";
242202
while (node != nullptr)
243203
{
244204
if (node->left == nullptr)
245205
{
246-
result += to_string(node->data) + " ";
206+
result.push_back(node->data);
247207
node = node->right;
248208
}
249209
else
@@ -261,26 +221,20 @@ string BinarySearchTree::_MorrisInorderTraversal(Node* node)
261221
else
262222
{
263223
predecessor->right = nullptr;
264-
result += to_string(node->data) + " ";
224+
result.push_back(node->data);
265225
node = node->right;
266226
}
267227
}
268228
}
269-
if (!result.empty())
270-
{
271-
result.pop_back();
272-
}
273-
return result;
274229
}
275230

276-
string BinarySearchTree::_MorrisPreorderTraversal(Node* node)
231+
void BinarySearchTree::_MorrisPreorderTraversal(Node* node, vector<int> & result)
277232
{
278-
string result = "";
279233
while (node != nullptr)
280234
{
281235
if (node->left == nullptr)
282236
{
283-
result += to_string(node->data) + " ";
237+
result.push_back(node->data);
284238
node = node->right;
285239
}
286240
else
@@ -293,7 +247,7 @@ string BinarySearchTree::_MorrisPreorderTraversal(Node* node)
293247
if (predecessor->right == nullptr)
294248
{
295249
predecessor->right = node;
296-
result += to_string(node->data) + " ";
250+
result.push_back(node->data);
297251
node = node->left;
298252
}
299253
else
@@ -303,21 +257,15 @@ string BinarySearchTree::_MorrisPreorderTraversal(Node* node)
303257
}
304258
}
305259
}
306-
if (!result.empty())
307-
{
308-
result.pop_back();
309-
}
310-
return result;
311260
}
312261

313-
string BinarySearchTree::_MorrisPostorderTraversal(Node* node)
262+
void BinarySearchTree::_MorrisPostorderTraversal(Node* node, vector<int>& result)
314263
{
315-
string result = "";
316264
while (node != nullptr)
317265
{
318266
if (node->right == nullptr)
319267
{
320-
result += to_string(node->data) + " ";
268+
result.push_back(node->data);
321269
node = node->left;
322270
}
323271
else
@@ -330,7 +278,7 @@ string BinarySearchTree::_MorrisPostorderTraversal(Node* node)
330278
if (predecessor->left == nullptr)
331279
{
332280
predecessor->left = node;
333-
result += to_string(node->data) + " ";
281+
result.push_back(node->data);
334282
node = node->right;
335283
}
336284
else
@@ -340,12 +288,7 @@ string BinarySearchTree::_MorrisPostorderTraversal(Node* node)
340288
}
341289
}
342290
}
343-
if (!result.empty())
344-
{
345-
result.pop_back();
346-
}
347291
reverse(result.begin(), result.end());
348-
return result;
349292
}
350293

351294
void BinarySearchTree::InsertNode(int value)
@@ -360,32 +303,44 @@ void BinarySearchTree::DeleteNode(int value)
360303
this->_DeleteNode(node);
361304
}
362305

363-
string BinarySearchTree::GetRecursiveInorderTravesalResult()
306+
vector<int> BinarySearchTree::GetRecursiveInorderTravesalResult()
364307
{
365-
return this->_RecursiveInorderTraversal(this->_root);
308+
vector<int> result;
309+
this->_RecursiveInorderTraversal(this->_root, result);
310+
return result;
366311
}
367312

368-
string BinarySearchTree::GetRecursivePreorderTravesalResult()
313+
vector<int> BinarySearchTree::GetRecursivePreorderTravesalResult()
369314
{
370-
return this->_RecursivePreorderTraversal(this->_root);
315+
vector<int> result;
316+
this->_RecursivePreorderTraversal(this->_root, result);
317+
return result;
371318
}
372319

373-
string BinarySearchTree::GetRecursivePostorderTravesalResult()
320+
vector<int> BinarySearchTree::GetRecursivePostorderTravesalResult()
374321
{
375-
return this->_RecursivePostorderTraversal(this->_root);
322+
vector<int> result;
323+
this->_RecursivePostorderTraversal(this->_root, result);
324+
return result;
376325
}
377326

378-
string BinarySearchTree::GetMorrisInorderTraversalResult()
327+
vector<int> BinarySearchTree::GetMorrisInorderTraversalResult()
379328
{
380-
return this->_MorrisInorderTraversal(this->_root);
329+
vector<int> result;
330+
this->_MorrisInorderTraversal(this->_root, result);
331+
return result;
381332
}
382333

383-
string BinarySearchTree::GetMorrisPreorderTraversalResult()
334+
vector<int> BinarySearchTree::GetMorrisPreorderTraversalResult()
384335
{
385-
return this->_MorrisPreorderTraversal(this->_root);
336+
vector<int> result;
337+
this->_MorrisPreorderTraversal(this->_root, result);
338+
return result;
386339
}
387340

388-
string BinarySearchTree::GetMorrisPostorderTraversalResult()
341+
vector<int> BinarySearchTree::GetMorrisPostorderTraversalResult()
389342
{
390-
return this->_MorrisPostorderTraversal(this->_root);
343+
vector<int> result;
344+
this->_MorrisPostorderTraversal(this->_root, result);
345+
return result;
391346
}

Tests/0002_Tree/0001_BinarySearchTreeTest.cc

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@
33
#include "../Headers/0002_Tree/0001_BinarySearchTree.h"
44
#include "../0000_CommonUtilities/UnitTestHelper.h"
55

6-
// Demonstrate some basic assertions.
76
namespace BinarySearchTreeTest
87
{
8+
UnitTestHelper<int> unitTestHelper;
9+
910
TEST(BSTInsertData, RecursiveInorderTest)
1011
{
11-
UnitTestHelper<int> unitTestHelper;
1212
BinarySearchTree bst;
1313
bst.InsertNode(50);
1414
bst.InsertNode(30);
1515
bst.InsertNode(60);
1616

1717

18-
string actualResult = bst.GetRecursiveInorderTravesalResult();
19-
string r = unitTestHelper.VerifyVectorResult({30, 50, 60});
18+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetRecursiveInorderTravesalResult());
2019
string expectedResult = "30 50 60";
2120

22-
EXPECT_EQ(actualResult, r);
21+
EXPECT_EQ(actualResult, expectedResult);
2322
}
2423

2524
TEST(BSTInsertData, RecursivePreorderTest)
@@ -29,7 +28,7 @@ namespace BinarySearchTreeTest
2928
bst.InsertNode(30);
3029
bst.InsertNode(60);
3130

32-
string actualResult = bst.GetRecursivePreorderTravesalResult();
31+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetRecursivePreorderTravesalResult());
3332
string expectedResult = "50 30 60";
3433

3534
EXPECT_EQ(actualResult, expectedResult);
@@ -42,7 +41,7 @@ namespace BinarySearchTreeTest
4241
bst.InsertNode(30);
4342
bst.InsertNode(60);
4443

45-
string actualResult = bst.GetRecursivePostorderTravesalResult();
44+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetRecursivePostorderTravesalResult());
4645
string expectedResult = "30 60 50";
4746

4847
EXPECT_EQ(actualResult, expectedResult);
@@ -56,7 +55,7 @@ namespace BinarySearchTreeTest
5655
bst.InsertNode(60);
5756

5857

59-
string actualResult = bst.GetMorrisInorderTraversalResult();
58+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetMorrisInorderTraversalResult());
6059
string expectedResult = "30 50 60";
6160

6261
EXPECT_EQ(actualResult, expectedResult);
@@ -70,7 +69,7 @@ namespace BinarySearchTreeTest
7069
bst.InsertNode(60);
7170

7271

73-
string actualResult = bst.GetMorrisPreorderTraversalResult();
72+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetMorrisPreorderTraversalResult());
7473
string expectedResult = "50 30 60";
7574

7675
EXPECT_EQ(actualResult, expectedResult);
@@ -84,7 +83,7 @@ namespace BinarySearchTreeTest
8483
bst.InsertNode(60);
8584

8685

87-
string actualResult = bst.GetMorrisPostorderTraversalResult();
86+
string actualResult = unitTestHelper.VerifyVectorResult(bst.GetMorrisPostorderTraversalResult());
8887
string expectedResult = "30 60 50";
8988

9089
EXPECT_EQ(actualResult, expectedResult);

0 commit comments

Comments
 (0)