#include<iostream>
#define infinity 999
using namespace std;
struct tnode
{
tnode* lchild;
int data;
tnode* rchild;
int *aptr;
int ind;
tnode()
{
lchild=NULL;
aptr=NULL;
ind=0;
rchild=NULL;
}
};
tnode* create(tnode* root,int *s1,int *s2,int *s3,int level,int &cnt)
{
if(level==0)
{
root=new tnode();
if(cnt==1)
{
root->aptr=s1;
cnt++;
return root;
}
else if(cnt==2)
{
root->aptr=s2;
cnt++;
return root;
}
else if(cnt==3)
{
root->aptr=s3;
cnt++;
return root;
}
else
return root;
}
root=new tnode();
root->lchild=create(root->lchild,s1,s2,s3,level-1,cnt);
root->rchild=create(root->rchild,s1,s2,s3,level-1,cnt);
return root;
}
void fun(tnode* root,int level,int n)
{
if(level==0)
{
if((root->ind>=n)||(root->aptr==NULL))
{
root->data=infinity;
return;
}
else
{
root->data=root->aptr[root->ind];
return;
}
}
fun(root->lchild,level-1,n);
fun(root->rchild,level-1,n);
root->data=min(root->lchild->data,root->rchild->data);
}
void display(tnode* root)
{
if(root)
{
display(root->lchild);
cout<<root->data<<" ";
display(root->rchild);
}
}
void get_roottoleaf(tnode* root,int k,int level)
{
if(level==0)
{
if(root->data==k)
{
root->ind++;
return;
}
else
return;
}
get_roottoleaf(root->lchild,k,level-1);
get_roottoleaf(root->rchild,k,level-1);
}
int main()
{
tnode* root=NULL;
int s1[]={2,5,8,12};
int s2[]={1,3,4,6};
int s3[]={7,9,10,11};
int level=2,cnt=1;
int n=sizeof(s1)/sizeof(s1[0]);
root=create(root,s1,s2,s3,level,cnt);
for(int i=0;i<=6;i++)
{
fun(root,level,n);
get_roottoleaf(root,root->data,level);
}
cout<<root->data<<" is the median of the sorted array.\n";
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNkZWZpbmUgaW5maW5pdHkgOTk5CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCB0bm9kZQp7Cgl0bm9kZSogbGNoaWxkOwoJaW50IGRhdGE7Cgl0bm9kZSogcmNoaWxkOwoJaW50ICphcHRyOwoJaW50IGluZDsKCXRub2RlKCkKCXsKCQlsY2hpbGQ9TlVMTDsKCQlhcHRyPU5VTEw7CgkJaW5kPTA7CgkJcmNoaWxkPU5VTEw7Cgl9Cn07Cgp0bm9kZSogY3JlYXRlKHRub2RlKiByb290LGludCAqczEsaW50ICpzMixpbnQgKnMzLGludCBsZXZlbCxpbnQgJmNudCkKewoJaWYobGV2ZWw9PTApCgl7CgkJcm9vdD1uZXcgdG5vZGUoKTsKCQlpZihjbnQ9PTEpCgkJewoJCQlyb290LT5hcHRyPXMxOwoJCQljbnQrKzsKCQkJcmV0dXJuIHJvb3Q7CgkJfQoJCWVsc2UgaWYoY250PT0yKQoJCXsKCQkJcm9vdC0+YXB0cj1zMjsKCQkJY250Kys7CgkJCXJldHVybiByb290OwoJCX0KCQllbHNlIGlmKGNudD09MykKCQl7CgkJCXJvb3QtPmFwdHI9czM7CgkJCWNudCsrOwoJCQlyZXR1cm4gcm9vdDsKCQl9CgkJZWxzZQoJCXJldHVybiByb290OwoJfQoJcm9vdD1uZXcgdG5vZGUoKTsKCXJvb3QtPmxjaGlsZD1jcmVhdGUocm9vdC0+bGNoaWxkLHMxLHMyLHMzLGxldmVsLTEsY250KTsKCXJvb3QtPnJjaGlsZD1jcmVhdGUocm9vdC0+cmNoaWxkLHMxLHMyLHMzLGxldmVsLTEsY250KTsKCXJldHVybiByb290Owp9CnZvaWQgZnVuKHRub2RlKiByb290LGludCBsZXZlbCxpbnQgbikKewoJaWYobGV2ZWw9PTApCgl7CgkJaWYoKHJvb3QtPmluZD49bil8fChyb290LT5hcHRyPT1OVUxMKSkKCQl7CgkJCXJvb3QtPmRhdGE9aW5maW5pdHk7CgkJCXJldHVybjsKCQl9CgkJZWxzZQoJCXsKCQkJcm9vdC0+ZGF0YT1yb290LT5hcHRyW3Jvb3QtPmluZF07CgkJCXJldHVybjsKCQl9Cgl9CglmdW4ocm9vdC0+bGNoaWxkLGxldmVsLTEsbik7CglmdW4ocm9vdC0+cmNoaWxkLGxldmVsLTEsbik7Cglyb290LT5kYXRhPW1pbihyb290LT5sY2hpbGQtPmRhdGEscm9vdC0+cmNoaWxkLT5kYXRhKTsKfQp2b2lkIGRpc3BsYXkodG5vZGUqIHJvb3QpCnsKCWlmKHJvb3QpCgl7CgkJZGlzcGxheShyb290LT5sY2hpbGQpOwoJCWNvdXQ8PHJvb3QtPmRhdGE8PCIgIjsKCQlkaXNwbGF5KHJvb3QtPnJjaGlsZCk7Cgl9Cn0Kdm9pZCBnZXRfcm9vdHRvbGVhZih0bm9kZSogcm9vdCxpbnQgayxpbnQgbGV2ZWwpCnsKCWlmKGxldmVsPT0wKQoJewoJCWlmKHJvb3QtPmRhdGE9PWspCgkJewoJCQlyb290LT5pbmQrKzsKCQkJcmV0dXJuOwoJCX0KCQllbHNlCgkJICByZXR1cm47CiAgICB9CglnZXRfcm9vdHRvbGVhZihyb290LT5sY2hpbGQsayxsZXZlbC0xKTsKCWdldF9yb290dG9sZWFmKHJvb3QtPnJjaGlsZCxrLGxldmVsLTEpOwp9CmludCBtYWluKCkKewoJdG5vZGUqIHJvb3Q9TlVMTDsKCWludCBzMVtdPXsyLDUsOCwxMn07CglpbnQgczJbXT17MSwzLDQsNn07CglpbnQgczNbXT17Nyw5LDEwLDExfTsKCWludCBsZXZlbD0yLGNudD0xOwoJaW50IG49c2l6ZW9mKHMxKS9zaXplb2YoczFbMF0pOwoJcm9vdD1jcmVhdGUocm9vdCxzMSxzMixzMyxsZXZlbCxjbnQpOwoJZm9yKGludCBpPTA7aTw9NjtpKyspCgl7CgkJZnVuKHJvb3QsbGV2ZWwsbik7CgkJZ2V0X3Jvb3R0b2xlYWYocm9vdCxyb290LT5kYXRhLGxldmVsKTsKCX0KCWNvdXQ8PHJvb3QtPmRhdGE8PCIgaXMgdGhlIG1lZGlhbiBvZiB0aGUgc29ydGVkIGFycmF5LlxuIjsKCXJldHVybiAwOwp9Cg==