c语言二叉树问题
#include<stdio.h>#include<malloc.h>#defineMAXSIZE100typedefintelemtype;typedefstructB...
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct Bitnode
{elemtype data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
Bitree CreatBintree()
{Bitnode *T;
int ch;
scanf("\n%d",&ch);
if(ch==0)
T=NULL;
else
{T=(Bitnode*)malloc(sizeof(Bitnode));
T->data=ch;
T->lchild=CreatBintree();
T->rchild=CreatBintree();
}
return T;
}
void visit(data)
{
printf("%d",data);
}
void Preorder(Bitree T)
{if(T==NULL)return;
visit(T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
void Inorder(Bitree T)
{if(T==NULL)return;
Inorder(T->lchild);
visit(T->data);
Inorder(T->rchild);
}
void Postorder(Bitree T)
{if(T==NULL)return;
Postorder(T->lchild);
Postorder(T->rchild);
visit(T->data);
}
void Levelorder(Bitree T)
{Bitree a[MAXSIZE];
int front, rear;
if(T==NULL)return;
front=-1;
rear=0;
a[rear]=T;
while(front!=rear)
{front++;
visit(a[front]->data);
if(a[front]->lchild!=NULL)
{rear++;
a[rear]=a[front]->lchild;
}
if(a[front]->rchild!=NULL)
{rear++;
a[rear]=a[front]->rchild;
}
}
}
int Countleaf(Bitree T)
{if(T==NULL)return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return (1);
else
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
void main()
{int k,ch;
Bitree Tree;
//printf("please input a bittree:\n");
//scanf("\n%d",&ch);
Tree=CreatBintree();
Preorder(Tree);
printf("\n");
Inorder(Tree);
printf("\n");
Postorder(Tree);
printf("\n");
Levelorder(Tree);
printf("\n");
k=Countleaf(Tree);
printf("二叉树叶子节点数目为:%d",k);
printf("\n");
}
谁帮我看一下啊,到底哪里出错了!! 展开
#include<malloc.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct Bitnode
{elemtype data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
Bitree CreatBintree()
{Bitnode *T;
int ch;
scanf("\n%d",&ch);
if(ch==0)
T=NULL;
else
{T=(Bitnode*)malloc(sizeof(Bitnode));
T->data=ch;
T->lchild=CreatBintree();
T->rchild=CreatBintree();
}
return T;
}
void visit(data)
{
printf("%d",data);
}
void Preorder(Bitree T)
{if(T==NULL)return;
visit(T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
void Inorder(Bitree T)
{if(T==NULL)return;
Inorder(T->lchild);
visit(T->data);
Inorder(T->rchild);
}
void Postorder(Bitree T)
{if(T==NULL)return;
Postorder(T->lchild);
Postorder(T->rchild);
visit(T->data);
}
void Levelorder(Bitree T)
{Bitree a[MAXSIZE];
int front, rear;
if(T==NULL)return;
front=-1;
rear=0;
a[rear]=T;
while(front!=rear)
{front++;
visit(a[front]->data);
if(a[front]->lchild!=NULL)
{rear++;
a[rear]=a[front]->lchild;
}
if(a[front]->rchild!=NULL)
{rear++;
a[rear]=a[front]->rchild;
}
}
}
int Countleaf(Bitree T)
{if(T==NULL)return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return (1);
else
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
void main()
{int k,ch;
Bitree Tree;
//printf("please input a bittree:\n");
//scanf("\n%d",&ch);
Tree=CreatBintree();
Preorder(Tree);
printf("\n");
Inorder(Tree);
printf("\n");
Postorder(Tree);
printf("\n");
Levelorder(Tree);
printf("\n");
k=Countleaf(Tree);
printf("二叉树叶子节点数目为:%d",k);
printf("\n");
}
谁帮我看一下啊,到底哪里出错了!! 展开
4个回答
展开全部
#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define NULL 0
typedef int status;
typedef struct bitnode{ /*二叉树的结点*/
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
bitree t;
status createbitree(bitree *t) /*按先序次序输入值建立二叉树*/
{
char ch;
scanf("%c",&ch);fflush(stdin);/*清除缓存区里的回车*/
if(ch=='*') *t=NULL;/*这里以星号作为结束标志*/
else{
if(!(*t=(bitnode *)malloc(sizeof(bitnode))))exit(OVERFLOW);
(*t)->data=ch;
createbitree(&((*t)->lchild));
createbitree(&((*t)->rchild));
}
return OK;
}
status visit(char ch) /*对二叉树每个结点元素的访问操作*/
{
printf("%c",ch);
return OK;
} /*你这个visit函数好像没什么作用?可以删掉*/
status preordertraverse(bitree t) /*按先序访问二叉树*/
{
if(t)
{
printf("%c",t->data);
if(preordertraverse(t->lchild))
if(preordertraverse(t->rchild))return OK;
return ERROR;
}else return OK;
}
status jh(bitree t)
{
bitree x;
x=t->lchild;
t->lchild=t->rchild;
t->rchild=x;
return OK;
}
status exchange(bitree t) /*交换二叉树中所有结点的左、右子树*/
{
if(t)
{
jh(t);
if(jh(t->lchild)) /*这里是最重要的地方,你好像写错了吧*/
if(jh(t->rchild))return OK;
return ERROR;
}else return OK;
}
void main()
{
printf("input to create binary tree:\n");
createbitree(&t); /*按先序建立二叉树*/
printf("create ok");/*提示createbitree函数没有出问题*/
exchange(t);/*交换每个结点的左、右子树*/
printf("\n");/*输出一个换行*/
preordertraverse(t); /*按先序访问修改后的二叉树*/
getch();
}
我试过了,可以
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define NULL 0
typedef int status;
typedef struct bitnode{ /*二叉树的结点*/
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
bitree t;
status createbitree(bitree *t) /*按先序次序输入值建立二叉树*/
{
char ch;
scanf("%c",&ch);fflush(stdin);/*清除缓存区里的回车*/
if(ch=='*') *t=NULL;/*这里以星号作为结束标志*/
else{
if(!(*t=(bitnode *)malloc(sizeof(bitnode))))exit(OVERFLOW);
(*t)->data=ch;
createbitree(&((*t)->lchild));
createbitree(&((*t)->rchild));
}
return OK;
}
status visit(char ch) /*对二叉树每个结点元素的访问操作*/
{
printf("%c",ch);
return OK;
} /*你这个visit函数好像没什么作用?可以删掉*/
status preordertraverse(bitree t) /*按先序访问二叉树*/
{
if(t)
{
printf("%c",t->data);
if(preordertraverse(t->lchild))
if(preordertraverse(t->rchild))return OK;
return ERROR;
}else return OK;
}
status jh(bitree t)
{
bitree x;
x=t->lchild;
t->lchild=t->rchild;
t->rchild=x;
return OK;
}
status exchange(bitree t) /*交换二叉树中所有结点的左、右子树*/
{
if(t)
{
jh(t);
if(jh(t->lchild)) /*这里是最重要的地方,你好像写错了吧*/
if(jh(t->rchild))return OK;
return ERROR;
}else return OK;
}
void main()
{
printf("input to create binary tree:\n");
createbitree(&t); /*按先序建立二叉树*/
printf("create ok");/*提示createbitree函数没有出问题*/
exchange(t);/*交换每个结点的左、右子树*/
printf("\n");/*输出一个换行*/
preordertraverse(t); /*按先序访问修改后的二叉树*/
getch();
}
我试过了,可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct Bitnode
{elemtype data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
Bitree CreatBintree()
{Bitnode *T;
int ch;
scanf("%d",&ch); //问题二
if(ch==0)
T=NULL;
else
{T=(Bitnode*)malloc(sizeof(Bitnode));
T->data=ch;
T->lchild=CreatBintree();
T->rchild=CreatBintree();
}
return T;
}
void visit(int data) //问题一
{
printf("%d ",data);
}
void Preorder(Bitree T)
{if(T==NULL)return;
visit(T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
void Inorder(Bitree T)
{if(T==NULL)return;
Inorder(T->lchild);
visit(T->data);
Inorder(T->rchild);
}
void Postorder(Bitree T)
{if(T==NULL)return;
Postorder(T->lchild);
Postorder(T->rchild);
visit(T->data);
}
void Levelorder(Bitree T)
{Bitree a[MAXSIZE];
int front, rear;
if(T==NULL)return;
front=-1;
rear=0;
a[rear]=T;
while(front!=rear)
{front++;
visit(a[front]->data);
if(a[front]->lchild!=NULL)
{rear++;
a[rear]=a[front]->lchild;
}
if(a[front]->rchild!=NULL)
{rear++;
a[rear]=a[front]->rchild;
}
}
}
int Countleaf(Bitree T)
{if(T==NULL)return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return (1);
else
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
void main()
{int k,ch;
Bitree Tree;
//printf("please input a bittree:\n");
//scanf("\n%d",&ch);
Tree=CreatBintree();
Preorder(Tree);
printf("\n");
Inorder(Tree);
printf("\n");
Postorder(Tree);
printf("\n");
Levelorder(Tree);
printf("\n");
k=Countleaf(Tree);
printf("二叉树叶子节点数目为:%d",k);
printf("\n");
}
//输入
10 20 0 0 30 0 0
回车 就出结果
#include<malloc.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct Bitnode
{elemtype data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
Bitree CreatBintree()
{Bitnode *T;
int ch;
scanf("%d",&ch); //问题二
if(ch==0)
T=NULL;
else
{T=(Bitnode*)malloc(sizeof(Bitnode));
T->data=ch;
T->lchild=CreatBintree();
T->rchild=CreatBintree();
}
return T;
}
void visit(int data) //问题一
{
printf("%d ",data);
}
void Preorder(Bitree T)
{if(T==NULL)return;
visit(T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
void Inorder(Bitree T)
{if(T==NULL)return;
Inorder(T->lchild);
visit(T->data);
Inorder(T->rchild);
}
void Postorder(Bitree T)
{if(T==NULL)return;
Postorder(T->lchild);
Postorder(T->rchild);
visit(T->data);
}
void Levelorder(Bitree T)
{Bitree a[MAXSIZE];
int front, rear;
if(T==NULL)return;
front=-1;
rear=0;
a[rear]=T;
while(front!=rear)
{front++;
visit(a[front]->data);
if(a[front]->lchild!=NULL)
{rear++;
a[rear]=a[front]->lchild;
}
if(a[front]->rchild!=NULL)
{rear++;
a[rear]=a[front]->rchild;
}
}
}
int Countleaf(Bitree T)
{if(T==NULL)return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return (1);
else
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
void main()
{int k,ch;
Bitree Tree;
//printf("please input a bittree:\n");
//scanf("\n%d",&ch);
Tree=CreatBintree();
Preorder(Tree);
printf("\n");
Inorder(Tree);
printf("\n");
Postorder(Tree);
printf("\n");
Levelorder(Tree);
printf("\n");
k=Countleaf(Tree);
printf("二叉树叶子节点数目为:%d",k);
printf("\n");
}
//输入
10 20 0 0 30 0 0
回车 就出结果
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的这些困惑都将烟消云散。
群里有高手坐镇、完全可以回答你的问题、
同时还可以为你指明学习方向、
同时群里还共享了许多资料。
当然,你也可以灌水聊天、天南地北、海阔天空、
还在等什么?赶快加入我们吧!
群里有高手坐镇、完全可以回答你的问题、
同时还可以为你指明学习方向、
同时群里还共享了许多资料。
当然,你也可以灌水聊天、天南地北、海阔天空、
还在等什么?赶快加入我们吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看吧,很详细的。就不多解释了
http://wenku.baidu.com/view/820bfffb04a1b0717fd5dde8?fr=prin
http://wenku.baidu.com/view/820bfffb04a1b0717fd5dde8?fr=prin
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询