forked from NIKHILSINGH1510/Test_Repo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbinarytreefrompostinorder.cpp
More file actions
67 lines (64 loc) · 1.12 KB
/
binarytreefrompostinorder.cpp
File metadata and controls
67 lines (64 loc) · 1.12 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<bits/stdc++.h>
using namespace std;
class Node
{
public:
int data;
Node* left;
Node* right;
Node(int val)
{
data=val;
left=NULL;
right=NULL;
}
};
int search(int inorder[],int start,int end,int curr)
{
for(int i=start;i<=end;i++)
{
if(inorder[i]==curr)
{
return i;
}
}
return -1;
}
Node* buildtree(int inorder[],int postorder[],int start,int end)
{
static int idx=end;
if (start>end)
{
return NULL;
}
int curr=postorder[idx];
idx--;
Node *n=new Node(curr);
if(start == end)
{
return n;
}
int pos=search(inorder,start,end,curr);
n->right=buildtree(inorder,postorder,pos+1,end);
n->left=buildtree(inorder,postorder,start,pos-1);
return n;
}
void inorder(Node* root)
{
if(root==NULL)
{
return;
}
inorder(root->left);
cout<<root->data<<" ";
inorder(root->right);
}
int main()
{
int n=7;
int in[n]={4,2,5,1,6,3,7};
int post[n]={4,5,2,6,7,3,1};
Node* root=buildtree(in,post,0,n-1);
inorder(root);
return 0;
}