diff --git a/lectures/21_trees_IV/inorder_main.cpp b/lectures/21_trees_IV/inorder_main.cpp new file mode 100644 index 0000000..93ccefc --- /dev/null +++ b/lectures/21_trees_IV/inorder_main.cpp @@ -0,0 +1,53 @@ +#include + +class TreeNode { +public: + int val; + TreeNode* left; + TreeNode* right; + + TreeNode(int value) : val(value), left(NULL), right(NULL) {} +}; + +void inorderTraversal(TreeNode* root) { + TreeNode *current=root; + TreeNode *rightmost; + while(current!=NULL){ + if(current->left!=NULL){ + rightmost=current->left; + while(rightmost->right!=NULL && rightmost->right!=current){ + rightmost=rightmost->right; + } + if(rightmost->right==NULL){ /* first time */ + rightmost->right=current; + current=current->left; + }else{ /* second time */ + std::cout << current->val << " "; + rightmost->right=NULL; + current=current->right; + } + }else{ /* nodes which do not have left child */ + std::cout << current->val << " "; + current=current->right; + } + } + return; +} + +int main() { + TreeNode* root = new TreeNode(1); + root->left = new TreeNode(2); + root->right = new TreeNode(3); + root->left->left = new TreeNode(4); + root->left->right = new TreeNode(5); + root->left->right->left = new TreeNode(6); + root->left->right->right = new TreeNode(7); + root->right->right = new TreeNode(8); + root->right->right->left = new TreeNode(9); + + std::cout << "Inorder Traversal using Morris Traversal:\n"; + inorderTraversal(root); + std::cout << std::endl; + + return 0; +}