#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct TNode{
elemtype data;
TNode *rchild,*lchild,*parent;
int lsize;
}TNode,*Bitree;
void createT(Bitree &bt,Bitree pre){
int c;
scanf("%d",&c);
if(c!=-1){
bt=(TNode*)malloc(sizeof(TNode));
bt->data=c;
bt->lsize=0;
bt->parent=pre;
createT(bt->lchild,bt);
createT(bt->rchild,bt);
}else{
bt=NULL;
}
}
int addLsize(Bitree bt){
int lnum,rnum;
if(bt){
lnum=addLsize(bt->lchild);
rnum=addLsize(bt->rchild);
bt->lsize=lnum;
return lnum+rnum+1;
}else
return 0;
}
void printT(Bitree bt){
if(bt){
printT(bt->lchild);
printf("%d:%d \n",bt->data,bt->lsize);
printT(bt->rchild);
}
}
int search(Bitree bt,int k){
if(bt->lsize==k-1)
return bt->data;
else if(bt->lsize>k-1)
return search(bt->lchild,k);
else
return search(bt->rchild,k-bt->lsize-1);
}
int main(){ //5 3 2 1 -1 -1 -1 4 -1 -1 7 6 -1 -1 -1
Bitree bt;
createT(bt,NULL);
addLsize(bt);
printf("输出lsize:\n");
printT(bt);
putchar(10);
int a;
for(a=1;a<=7;a++){
int m=search(bt,a);
printf("第%d小的是%d\n",a,m);
}
return 0;
}
输入:
5 3 2 1 -1 -1 -1 4 -1 -1 7 6 -1 -1 -1
输出:
输出lsize:
1:0
2:1
3:2
4:0
5:4
6:0
7:1
第1小的是1
第2小的是2
第3小的是3
第4小的是4
第5小的是5
第6小的是6
第7小的是7