2019年06月17日
阅读 589
评论 0
喜欢 0
二叉树的存储结构
#define MaxSize 100
typedef char ElemType;
struct BTNode {
ElemType data;
struct BTNode *lchild;
struct BTNode *rchild;
};
创建二叉树 A(B(D(,G)),C(E,F))
void CreateBTNode(BTNode *&b,char *str) {
BTNode *St[MaxSize],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0') {
switch(ch) {
case'(':
top++;
St[top]=p;
k=1;
break;
case')':
top--;
break;
case',':
k=2;
break;
default:
p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)b=p;
else {
switch(k) {
case 1:
St[top]->lchild=p;
break;
case 2:
St[top]->rchild=p;
break;
}
}
}
ch=str[++j];
}
}
查找节点
BTNode *FindNode(BTNode *b,ElemType x) {
BTNode *p;
if(b==NULL)
return NULL;
else if(b->data==x)
return b;
else {
p=FindNode(b->lchild,x);
if(p!=NULL)
return p;
else
return FindNode(b->rchild,x);
}
}
求高度
int BTNodeDepth(BTNode *b) {
int lchilddep,rchilddep;
if(b==NULL) return 0;
else {
lchilddep=BTNodeDepth(b->lchild);
rchilddep=BTNodeDepth(b->rchild);
return (lchilddep>rchilddep?lchilddep+1:rchilddep+1);
}
}
打印二叉树 A(B(D(,G)),C(E,F))
void DispBTNode(BTNode *b) {
if(b!=NULL) {
cout<<b->data;
if(b->lchild!=NULL || b->rchild!=NULL) {
cout<<'(';
DispBTNode(b->lchild);
if(b->rchild!=NULL)
cout<<',';
DispBTNode(b->rchild);
cout<<')';
}
}
}
暂无评论