-
Notifications
You must be signed in to change notification settings - Fork 0
/
inorder_traversal_worec.c
107 lines (94 loc) · 1.74 KB
/
inorder_traversal_worec.c
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//Inorder traversal without recursion
#include <stdio.h>
#include <stdlib.h>
#define max 20
typedef struct tree
{
int data;
struct tree *right;
struct tree *left;
}nd;
nd* var[max];
int top=-1;
int insert(nd **root)
{
int sc;
printf("\nEnter the data = ");
scanf("%d",&sc);
nd *ptr=(nd*)malloc(sizeof(nd));
ptr->data=sc;
ptr->right=NULL;
ptr->left=NULL;
if((*root)==NULL)
{
(*root)=ptr;
}
else
{
nd *cur=(*root);
while(cur!=NULL)
{
if(sc<(cur->data))
{
if(cur->left==NULL)
{
cur->left=ptr;
return;
}
cur=cur->left;
}
else if (sc>(cur->data))
{
if(cur->right==NULL)
{
cur->right=ptr;
return;
}
cur=cur->right;
}
else if(sc==(cur->data))
{
printf("\nUnable to insert as element already present");
}
}
}
}
void push(nd *elem)
{
top+=1;
var[top]=elem;
}
nd* pop()
{
nd *ele=var[top];
top--;
return ele;
}
void inorder_trav(nd *root)
{
while(root!=NULL || top!=-1)
{
while(root!=NULL)
{
push(root);
root=root->left;
}
root=pop();
printf("%d ",root->data);
root=root->right;
}
}
int main(void)
{
int c=8;
nd *root=NULL;
while(c>0)
{
insert(&root);
c--;
}
printf("\nInorder traversal :- ");
inorder_trav(root);
printf("\nInorder traversal :- ");
inorder_trav(root);
}