33,010
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int lchildh,rchildh,N=0;
struct BTNode{
char data;
struct BTNode *lchild,*rchild;
};
struct SqQueue{
BTNode *data[101];
int rear,front;
};
void CreateBTNode(BTNode *&b,char *str){
bool flag=true;
BTNode *st[100],*p;
int top=-1,k,j=0;
if(top==-1){
flag=false;
}
while(str[j]!=NULL){
if(flag==true){
if(str[j]=='('){
k=1;
}
else if(str[j]==','){
k=2;
if(str[j-1]!='('){
top--;
}
}
else if(str[j]==')'){
if(str[j-1]!=','){
top--;
}
}
else{
p=(BTNode*)malloc(sizeof(BTNode));
p->lchild=p->rchild=NULL;
p->data=str[j];
top++;
st[top]=p;
if(k==1){
st[top-1]->lchild=p;
}
else{
st[top-1]->rchild=p;
}
}
}
else{
top++;
st[top]=b;
b->data=str[j];
flag=true;
}
j++;
}
}
void DispBTNode(BTNode *b){
if(b!=NULL){
printf("%c",b->data);
if(b->lchild!=NULL||b->rchild!=NULL){
printf("(");
}
DispBTNode(b->lchild);
if(b->rchild!=NULL){
printf(",");
}
DispBTNode(b->rchild);
if(b->lchild!=NULL||b->rchild!=NULL){
printf(")");
}
}
}
int BTNodeDepth(BTNode *b){
if(b==NULL){
return 0;
}
else{
lchildh=BTNodeDepth(b->lchild);
lchildh=BTNodeDepth(b->rchild);
/*if(lchildh>rchildh){
return lchildh+1;
}*/
else return rchildh+1;
return (lchildh>=rchildh)?(lchildh+1):(rchildh+1);
}
}
int NodesCount(BTNode *b){
if(b==NULL){
return 0;
}
else{
N++;
NodesCount(b->rchild);
NodesCount(b->lchild);
return N;
}
}
void PreOrder(BTNode *b){
if(b!=NULL){
printf("%c ",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
void InOrder(BTNode *b){
if(b!=NULL){
InOrder(b->lchild);
printf("%c ",b->data);
InOrder(b->rchild);
}
}
void PostOrder(BTNode *b){
if(b!=NULL){
PostOrder(b->lchild);
PostOrder(b->rchild);
printf("%c ",b->data);
}
}
void InQueue(SqQueue *&q,BTNode *a){
if((q->rear+1)%101!=q->front){
q->rear=(q->rear+1)%101;
q->data[q->rear]=a;
}
}
/*BTNode *deQueue(SqQueue *&q){
BTNode *p;
// p=(BTNode*)malloc(sizeof(BTNode));
if(q->front!=q->rear){
p=q->data[q->front];
q->front=(q->front+1)%101;
}
return p;
}*/
void deQueue(SqQueue *&q,BTNode *&p){
if(q->front!=q->rear){
p=q->data[q->front+1];
q->front=(q->front+1)%101;
}
}
void LevelOrder(BTNode *b){
SqQueue *q;
q=(SqQueue *)malloc(sizeof(SqQueue));
q->rear=q->front=0;
InQueue(q,b);
while(q->rear!=q->front){
BTNode *p;
p=(BTNode*)malloc(sizeof(BTNode));
deQueue(q,p);
printf("%c ",p->data);
//printf("%c ",deQueue(q)->data);
if(p->lchild!=NULL){
InQueue(q,p->lchild);
}
if(p->rchild!=NULL){
InQueue(q,p->rchild);
}
}
}
int main(){
BTNode *b;
char *str;
str=(char *)malloc(sizeof(char));
b=(BTNode *)malloc(sizeof(BTNode));
b->lchild=b->rchild=NULL;
gets(str);
CreateBTNode(b,str);
DispBTNode(b);
printf("\n");
printf("%d\n",BTNodeDepth(b));
printf("%d\n",NodesCount(b));
PreOrder(b);
printf("\n");
InOrder(b);
printf("\n");
PostOrder(b);
printf("\n");
LevelOrder(b);
printf("\n");
return 0;
}