-
Notifications
You must be signed in to change notification settings - Fork 0
/
binary tree.cpp
143 lines (115 loc) · 2.98 KB
/
binary tree.cpp
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*geeks for geeks*/
// C program for different tree traversals
#include <iostream>
using namespace std;
typedef struct Node node;
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct Node
{
int data;
struct Node* left, *right;
/*Node(int data)
{
this->data = data;
left = right = NULL;
} */
};
node *create_node(int item)
{
node *new_node = (node*)malloc(sizeof(node));
if(new_node== NULL)
{
cout<<"Error! Could not create a new node\n";
exit(1);
}
new_node->data = item;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
/* Given a binary tree, print its nodes according to the
"bottom-up" postorder traversal. */
void printPostorder(node *node1)
{
if (node1 == NULL)
return;
// first recur on left subtree
printPostorder(node1->left);
// then recur on right subtree
printPostorder(node1->right);
// now deal with the node
cout << node1->data << " ";
}
/* Given a binary tree, print its nodes in inorder*/
void printInorder(node* node1)
{
if (node1 == NULL)
return;
/* first recur on left child */
printInorder(node1->left);
/* then print the data of node */
cout << node1->data << " ";
/* now recur on right child */
printInorder(node1->right);
}
void add_left_child(Node *node, Node *child)
{
node->left = child;
}
void add_right_child(Node *node, Node *child)
{
node->right = child;
}
Node *create_tree()
{
Node *one = create_node(1);
Node *two = create_node(2);
Node *three = create_node(3);
add_left_child(one, two);
add_right_child(one, three);
Node *four = create_node(4);
Node *five = create_node(5);
add_left_child(two, four);
add_right_child(two, five);
Node *six = create_node(6);
Node *seven = create_node(7);
add_left_child(three, six);
add_right_child(three, seven);
/*Node *eight = create_node(8);
add_right_child(nine, eight);
Node *three = create_node(9);
Node *four = create_node(4);
add_left_child(eight, three);
add_right_child(eight, four);
*/
return one;
}
/* Given a binary tree, print its nodes in preorder*/
void printPreorder(node* node1)
{
if (node1 == NULL)
return;
/* first print data of node */
cout << node1->data << " ";
/* then recur on left sutree */
printPreorder(node1->left);
/* now recur on right subtree */
printPreorder(node1->right);
}
/* Driver program to test above functions*/
int main()
{
struct Node *root = create_tree();
/*root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5); */
cout << "\nPreorder traversal of binary tree is \n";
printPreorder(root);
cout << "\nInorder traversal of binary tree is \n";
printInorder(root);
cout << "\nPostorder traversal of binary tree is \n";
printPostorder(root);
return 0;
}