5252 */
5353
5454#include < cassert> // / for assert
55+ #include < cstdint> // / for std::uint64_t
5556#include < iostream> // / for I/O operations
5657#include < vector> // / for vector
5758
@@ -76,33 +77,34 @@ namespace recursive_tree_traversals {
7677 * @param right follow up right subtree.
7778 */
7879struct Node {
79- uint64_t data = 0 ; // /< The value/key of the node.
80- struct Node *left{}; // /< struct pointer to left subtree.
81- struct Node *right{}; // /< struct pointer to right subtree.
80+ std:: uint64_t data = 0 ; // /< The value/key of the node.
81+ struct Node *left{}; // /< struct pointer to left subtree.
82+ struct Node *right{}; // /< struct pointer to right subtree.
8283};
8384/* *
8485 * @brief BT used to make the entire structure of the binary tree and the
8586 * functions associated with the binary tree
8687 */
8788class BT {
8889 public:
89- std::vector<uint64_t >
90+ std::vector<std:: uint64_t >
9091 inorder_result; // vector to store the inorder traversal of the tree.
91- std::vector<uint64_t >
92+ std::vector<std:: uint64_t >
9293 preorder_result; // vector to store the preorder traversal of the tree.
93- std::vector<uint64_t > postorder_result; // vector to store the preorder
94- // traversal of the tree.
94+ std::vector<std::uint64_t >
95+ postorder_result; // vector to store the preorder
96+ // traversal of the tree.
9597
9698 Node *createNewNode (
97- uint64_t ); // function that will create new node for insertion.
99+ std:: uint64_t ); // function that will create new node for insertion.
98100
99- std::vector<uint64_t > inorder (
101+ std::vector<std:: uint64_t > inorder (
100102 Node *); // function that takes root of the tree as an argument and
101103 // returns its inorder traversal.
102- std::vector<uint64_t > preorder (
104+ std::vector<std:: uint64_t > preorder (
103105 Node *); // function that takes root of the tree as an argument and
104106 // returns its preorder traversal.
105- std::vector<uint64_t > postorder (
107+ std::vector<std:: uint64_t > postorder (
106108 Node *); // function that takes root of the tree as an argument and
107109 // returns its postorder traversal.
108110};
@@ -113,7 +115,7 @@ class BT {
113115 * @param data value that a particular node will contain.
114116 * @return pointer to the newly created node with assigned data.
115117 */
116- Node *BT::createNewNode (uint64_t data) {
118+ Node *BT::createNewNode (std:: uint64_t data) {
117119 Node *node = new Node ();
118120 node->data = data;
119121 node->left = node->right = nullptr ;
@@ -127,7 +129,7 @@ Node *BT::createNewNode(uint64_t data) {
127129 * @param root head/root node of a tree
128130 * @return result that is containing the inorder traversal of a tree
129131 **/
130- std::vector<uint64_t > BT::inorder (Node *root) {
132+ std::vector<std:: uint64_t > BT::inorder (Node *root) {
131133 if (root == nullptr ) { // return if the current node is empty
132134 return {};
133135 }
@@ -147,7 +149,7 @@ std::vector<uint64_t> BT::inorder(Node *root) {
147149 * @param root head/root node of a tree
148150 * @return result that is containing the preorder traversal of a tree
149151 */
150- std::vector<uint64_t > BT::preorder (Node *root) {
152+ std::vector<std:: uint64_t > BT::preorder (Node *root) {
151153 if (root == nullptr ) { // if the current node is empty
152154 return {};
153155 }
@@ -167,7 +169,7 @@ std::vector<uint64_t> BT::preorder(Node *root) {
167169 * @param root head/root node of a tree
168170 * @return result that is containing the postorder traversal of a tree
169171 */
170- std::vector<uint64_t > BT::postorder (Node *root) {
172+ std::vector<std:: uint64_t > BT::postorder (Node *root) {
171173 if (root == nullptr ) { // if the current node is empty
172174 return {};
173175 }
@@ -180,6 +182,14 @@ std::vector<uint64_t> BT::postorder(Node *root) {
180182 return postorder_result;
181183}
182184
185+ void deleteAll (const Node *const root) {
186+ if (root) {
187+ deleteAll (root->left );
188+ deleteAll (root->right );
189+ delete root;
190+ }
191+ }
192+
183193} // namespace recursive_tree_traversals
184194
185195} // namespace others
@@ -200,17 +210,23 @@ void test1() {
200210 root->left ->right ->right = obj1.createNewNode (11 );
201211 root->right ->right ->left = obj1.createNewNode (4 );
202212
203- std::vector<uint64_t > actual_result_inorder{2 , 7 , 5 , 6 , 11 , 2 , 5 , 4 , 9 };
204- std::vector<uint64_t > actual_result_preorder{2 , 7 , 2 , 6 , 5 , 11 , 5 , 9 , 4 };
205- std::vector<uint64_t > actual_result_postorder{2 , 5 , 11 , 6 , 7 , 4 , 9 , 5 , 2 };
206- std::vector<uint64_t > result_inorder; // /< result stores the inorder
207- // /< traversal of the binary tree
208- std::vector<uint64_t > result_preorder; // /< result stores the preorder
209- // /< traversal of the binary tree
210- std::vector<uint64_t > result_postorder; // /< result stores the postorder
211- // /< traversal of the binary tree
212-
213- uint64_t size = actual_result_inorder.size ();
213+ std::vector<std::uint64_t > actual_result_inorder{2 , 7 , 5 , 6 , 11 ,
214+ 2 , 5 , 4 , 9 };
215+ std::vector<std::uint64_t > actual_result_preorder{2 , 7 , 2 , 6 , 5 ,
216+ 11 , 5 , 9 , 4 };
217+ std::vector<std::uint64_t > actual_result_postorder{2 , 5 , 11 , 6 , 7 ,
218+ 4 , 9 , 5 , 2 };
219+ std::vector<std::uint64_t >
220+ result_inorder; // /< result stores the inorder
221+ // /< traversal of the binary tree
222+ std::vector<std::uint64_t >
223+ result_preorder; // /< result stores the preorder
224+ // /< traversal of the binary tree
225+ std::vector<std::uint64_t >
226+ result_postorder; // /< result stores the postorder
227+ // /< traversal of the binary tree
228+
229+ std::uint64_t size = actual_result_inorder.size ();
214230
215231 // Calling inorder() function by passing a root node,
216232 // and storing the inorder traversal in result_inorder.
@@ -240,6 +256,7 @@ void test1() {
240256 std::cout << " Passed!" << std::endl;
241257
242258 std::cout << std::endl;
259+ deleteAll (root);
243260}
244261
245262/* *
@@ -257,17 +274,20 @@ void test2() {
257274 root->right ->left ->left = obj2.createNewNode (7 );
258275 root->right ->left ->right = obj2.createNewNode (8 );
259276
260- std::vector<uint64_t > actual_result_inorder{4 , 2 , 1 , 7 , 5 , 8 , 3 , 6 };
261- std::vector<uint64_t > actual_result_preorder{1 , 2 , 4 , 3 , 5 , 7 , 8 , 6 };
262- std::vector<uint64_t > actual_result_postorder{4 , 2 , 7 , 8 , 5 , 6 , 3 , 1 };
263- std::vector<uint64_t > result_inorder; // /< result stores the inorder
264- // /< traversal of the binary tree
265- std::vector<uint64_t > result_preorder; // /< result stores the preorder
266- // /< traversal of the binary tree
267- std::vector<uint64_t > result_postorder; // /< result stores the postorder
268- // /< traversal of the binary tree
269-
270- uint64_t size = actual_result_inorder.size ();
277+ std::vector<std::uint64_t > actual_result_inorder{4 , 2 , 1 , 7 , 5 , 8 , 3 , 6 };
278+ std::vector<std::uint64_t > actual_result_preorder{1 , 2 , 4 , 3 , 5 , 7 , 8 , 6 };
279+ std::vector<std::uint64_t > actual_result_postorder{4 , 2 , 7 , 8 , 5 , 6 , 3 , 1 };
280+ std::vector<std::uint64_t >
281+ result_inorder; // /< result stores the inorder
282+ // /< traversal of the binary tree
283+ std::vector<std::uint64_t >
284+ result_preorder; // /< result stores the preorder
285+ // /< traversal of the binary tree
286+ std::vector<std::uint64_t >
287+ result_postorder; // /< result stores the postorder
288+ // /< traversal of the binary tree
289+
290+ std::uint64_t size = actual_result_inorder.size ();
271291
272292 // Calling inorder() function by passing a root node,
273293 // and storing the inorder traversal in result_inorder.
@@ -297,6 +317,7 @@ void test2() {
297317 std::cout << " Passed!" << std::endl;
298318
299319 std::cout << std::endl;
320+ deleteAll (root);
300321}
301322
302323/* *
@@ -311,17 +332,20 @@ void test3() {
311332 root->left ->left = obj3.createNewNode (4 );
312333 root->left ->right = obj3.createNewNode (5 );
313334
314- std::vector<uint64_t > actual_result_inorder{4 , 2 , 5 , 1 , 3 };
315- std::vector<uint64_t > actual_result_preorder{1 , 2 , 4 , 5 , 3 };
316- std::vector<uint64_t > actual_result_postorder{4 , 5 , 2 , 3 , 1 };
317- std::vector<uint64_t > result_inorder; // /< result stores the inorder
318- // /< traversal of the binary tree
319- std::vector<uint64_t > result_preorder; // /< result stores the preorder
320- // /< traversal of the binary tree
321- std::vector<uint64_t > result_postorder; // /< result stores the postorder
322- // /< traversal of the binary tree
323-
324- uint64_t size = actual_result_inorder.size ();
335+ std::vector<std::uint64_t > actual_result_inorder{4 , 2 , 5 , 1 , 3 };
336+ std::vector<std::uint64_t > actual_result_preorder{1 , 2 , 4 , 5 , 3 };
337+ std::vector<std::uint64_t > actual_result_postorder{4 , 5 , 2 , 3 , 1 };
338+ std::vector<std::uint64_t >
339+ result_inorder; // /< result stores the inorder
340+ // /< traversal of the binary tree
341+ std::vector<std::uint64_t >
342+ result_preorder; // /< result stores the preorder
343+ // /< traversal of the binary tree
344+ std::vector<std::uint64_t >
345+ result_postorder; // /< result stores the postorder
346+ // /< traversal of the binary tree
347+
348+ std::uint64_t size = actual_result_inorder.size ();
325349
326350 // Calling inorder() function by passing a root node,
327351 // and storing the inorder traversal in result_inorder.
@@ -352,6 +376,7 @@ void test3() {
352376 std::cout << " Passed!" << std::endl;
353377
354378 std::cout << std::endl;
379+ deleteAll (root);
355380}
356381
357382/* *
0 commit comments