forked from hariom20singh/data-structure-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinorderMorrisTraversal.cpp
More file actions
44 lines (41 loc) · 1.4 KB
/
inorderMorrisTraversal.cpp
File metadata and controls
44 lines (41 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* Morris Traversal: Using Morris Traversal, we can traverse the tree without using stack and recursion. The idea of Morris Traversal is based on Threaded Binary Tree. In this traversal, we first create links to Inorder successor and print the data using these links, and finally revert the changes to restore original tree.
*/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
TreeNode *cur = root;
while(cur!=NULL){
if(cur->left==NULL){
res.push_back(cur->val);
cur=cur->right;
}
else {
TreeNode *pr = cur->left;
while(pr->right!=NULL&&pr->right!=cur)pr=pr->right;
if(pr->right==NULL){
pr->right=cur;
cur=cur->left;
}
else{
pr->right=NULL;
res.push_back(cur->val);
cur=cur->right;
}
}
}
return res;
}
};