From 06f03fdaa110c654c15608535edea788cef0ad6f Mon Sep 17 00:00:00 2001 From: Bhavya Sharma Date: Thu, 13 Oct 2022 10:19:13 +0530 Subject: [PATCH] Create Morris Traversal.cpp --- .../Morris Traversal.cpp | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Binary_Tree/All_Binary_Tree_question/Morris Traversal.cpp diff --git a/Binary_Tree/All_Binary_Tree_question/Morris Traversal.cpp b/Binary_Tree/All_Binary_Tree_question/Morris Traversal.cpp new file mode 100644 index 0000000..942afde --- /dev/null +++ b/Binary_Tree/All_Binary_Tree_question/Morris Traversal.cpp @@ -0,0 +1,58 @@ +//MORRIS TRAVERSAL +//Time Complexity - O(N) +//Space Complexity - O(1) + +#include +using namespace std; +//Tree Node +struct Node{ + public: + int data; + Node* left; + Node* right; + Node(int x){ + data=x; + left=NULL; + right=NULL; + } +}; +//function defining Morris Traversal +void MorrisTraversal(Node* root){ + Node* curr; + Node* prev; + if(root==NULL)return ; + + curr=root; + while(curr!=NULL){ + if(curr->left==NULL){ + cout<data<<" "; + curr=curr->right; + } + else{ + prev=curr->left; + while(prev->right!=NULL && prev->right!=curr){ + prev=prev->right; + } + if(prev->right==NULL){ + prev->right=curr; + curr=curr->left; + } + else{ + prev->right=NULL; + cout<data<<" "; + curr=curr->right; + } + } + } +} +int main(){ + Node* root=new Node(10); + root->left=new Node(20); + root->right=new Node(30); + root->left->left=new Node(40); + root->left->right=new Node(50); + root->right->left=new Node(60); + root->right->right=new Node(70); + MorrisTraversal(root); + return 0; +}