btc语言
❶ 层次遍历二叉树的c语言代码中 if(bt==NULL) return; front=-1;rear=0;这是什么意思
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct bitnode
{
datatype data;
struct bitnode *lchild,*rchild;
}tree;
tree *init()
{
tree *bt;
bt=NULL;
bt=(tree*)malloc(sizeof(tree));
bt->lchild=NULL;
bt->rchild=NULL;
return bt;
}
tree *create(tree *bt)
{
char ch;
scanf("%c",&ch);
if(ch=='0')
{
bt=NULL;
return bt;
}
else
{
bt=(tree *)malloc(sizeof(tree));
bt->data=ch;
bt->lchild=create(bt->lchild);
bt->rchild=create(bt->rchild);
}
return bt;
}
tree *Linsert(datatype x,tree *parent)
{
tree *p;
if(parent==NULL)
{
printf("insert error\n");
return NULL;
}
if((p=(tree*)malloc(sizeof(tree)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(parent->lchild==NULL)
parent->lchild=p;
else
{
p->lchild=parent->lchild;
parent->lchild=p;
}
return parent;
}
tree *Rinsert(datatype x,tree *parent)
{
tree *p;
if(parent==NULL)
{
printf("insert error\n");
return NULL;
}
if((p=(tree*)malloc(sizeof(tree)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL;
p->弯宴rchild=NULL;
if(parent->rchild==NULL)
parent->rchild=p;
else
{
p->rchild=parent->rchild;
parent->rchild=p;
}
return parent;
}
tree *Ldel(tree *parent)
{
tree *p;
if(parent==NULL||parent->lchild==NULL)
{
printf("delete error\州闹明n");
return NULL;
}
p=parent->lchild;
parent->lchild=NULL;
free(p);
return parent;
}
tree *Rdel(tree *parent)
{
tree *p;
if(parent==NULL||parent->rchild==NULL)
{
printf("delete error\n");
return NULL;
}
p=parent->rchild;
parent->rchild=NULL;
free(p);
return parent;
}
void visit(tree *bt)
{
printf("%c ",bt->data);
}
void preorder(tree *bt)
{
if(bt==NULL)
return ;
visit(bt);
preorder(bt->lchild);
preorder(bt->rchild);
}
void inorder(tree *bt)
{
if(bt==NULL)
return ;
inorder(bt->lchild);
visit(bt);
inorder(bt->rchild);
}
void postorder(tree *bt)
{
if(bt==NULL)
return ;
postorder(bt->lchild);
postorder(bt->册告rchild);
visit(bt);
}
tree *search(tree *bt,datatype x)
{
tree *p;
p=NULL;
if(bt)
{
if(bt->data==x)
return bt;
if(bt->lchild)
p=search(bt->lchild,x);
if(p!=NULL)
return p;
if(bt->rchild)
p=search(bt->rchild,x);
if(p!=NULL)
return p;
}
return p;
}
void nrpreorder(tree *bt)
{
tree *stack[1000],*p;
int top=-1;
if(bt==NULL)
return ;
p=bt;
while(!(p==NULL&&top==-1))
{
while(p!=NULL)
{
visit(p);
top++;
stack[top]=p;
p=p->lchild;
}
if(top<0)
return ;
else
{
p=stack[top];
top--;
p=p->rchild;
}
}
}
void nrinorder(tree *bt)
{
tree *stack[1000],*p;
int top=-1;
if(bt==NULL)
return ;
p=bt;
while(!(p==NULL&&top==-1))
{
while(p!=NULL)
{
top++;
stack[top]=p;
p=p->lchild;
}
if(top<0)
return ;
else
{
p=stack[top];
top--;
visit(p);
p=p->rchild;
}
}
}
void nrpostorder(tree *bt)
{
int top;
tree *d[1000],*dd;
tree *stack[1000],*p;
if(bt==NULL)
return ;
top=-1;
p=bt;
while(!(p==NULL&&top==-1))
{
while(p!=NULL)
{
top++;
stack[top]=p;
p=p->lchild;
}
dd=stack[top];
if(top>-1)
if(dd)
{
p=stack[top]->rchild;
d[top]=stack[top];
stack[top]=NULL;
dd=NULL;
}
else
{
p=d[top];
top--;
visit(p);
p=NULL;
}
}
}
void levelorder(tree *bt)
{
tree *queue[1000];
int front,rear;
if(bt==NULL)
return ;
front=-1;
rear=0;
queue[rear]=bt;
while(front!=rear)
{
front++;
visit(queue[front]);
if(queue[front]->lchild!=NULL)
{
rear++;
queue[rear]=queue[front]->lchild;
}
if(queue[front]->rchild!=NULL)
{
rear++;
queue[rear]=queue[front]->rchild;
}
}
}
int countleaf(tree *bt)
{
if(bt==NULL)
return 0;
if(bt->lchild==NULL&&bt->rchild==NULL)
return 1;
return(countleaf(bt->lchild)+countleaf(bt->rchild));
}
int main()
{
tree *bt,*p;
int n=1,m,t;
char x;
printf("-----------------------程序说明---------------------------\n");
printf("1.本程序涉及二叉树的所有操作。\n");
printf("2.创建操作为先序输入,输入0代表空。\n");
printf("3.删除操作和插入操作之前必须使用查找操作找到其双亲。\n");
printf("4.输入回车键开始本程序。\n");
printf("----------------------------------------------------------\n");
getchar();
while(n!=0)
{
printf("choose:\n1、Create a bitree 2、Search\n3、Preorder 4、Inorder 5、Postorder\n6、Levelorder 7、The number of leaves \n0、End\n");
printf("Do: ");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
bt=init();
printf("Create a bitree :");
bt=create(bt);
break;
case 2:
printf("Input a char :");
scanf("%c",&x);
getchar();
p=search(bt,x);
if(p!=NULL)
{
printf("1、do nothing \n2、Insret L-tree 3、Insert R-tree \n4、Delete L-tree 5、Delete R-tree \n");
printf("Do: ");
scanf("%d",&m);
getchar();
switch(m)
{
case 1: break;
case 2:
printf("Input a char :");
scanf("%c",&x);
Linsert(x,p);
break;
case 3:
printf("Input a char :");
scanf("%c",&x);
Rinsert(x,p);
break;
case 4:
if(Ldel(p)!=NULL)
printf("Complish delete !\n");
break;
case 5:
if(Rdel(p)!=NULL)
printf("Complish delete !\n");
break;
default : printf("Input error\n");
}
}
else printf("The char dose not exist\n");
break;
case 3:
printf("1、Recursive 2、Nonrecursive\n");
printf("Do: ");
scanf("%d",&t);
if(t==1)
preorder(bt);
else
nrpreorder(bt);
printf("\n");
break;
case 4:
printf("1、Recursive 2、Nonrecursive\n");
printf("Do: ");
scanf("%d",&t);
if(t==1)
inorder(bt);
else
nrinorder(bt);
printf("\n");
break;
case 5:
printf("1、Recursive 2、Nonrecursive\n");
printf("Do: ");
scanf("%d",&t);
if(t==1)
postorder(bt);
else
nrpostorder(bt);
printf("\n");
break;
case 6:
levelorder(bt);
break;
case 7:
printf("%d\n",countleaf(bt));
break;
case 0:break;
default : printf("Input error\n");
}
printf("\n");
}
return 0;
}
❷ C语言 超级BT问题
在计算机中,原则上所吵戚冲有的能被输入到计算机中的都被看做字符仔改。
但是这些符号中有被现实中作为其他数据处理的,比如数字
这时候,在给这些重合的数据重新编码以便区别,这就导致了 0这个样子的数据可以表示整数,不加任何限定标记,可以表示字符,加单引号,可以表示字符串 加升歼双引号 可以表示转移字符 加个\ 要是不加的话 你能区别,课计算机能区别吗。
❸ 为什么这段程序代码中if(bt)运行时会报错,到底错在哪了求c语言高手赐教
因为"if (bt)"带物中的这个蠢态液“bt “是个结构体变量,是从函数闭御形参过来的。
1.要么把形参改成指针;
2.要么改成 if (&bt);
通常不建议直接用函数形参传递结构体对象。
❹ 在C语言中createbt()是什么意思
createbt是一个函数,并且有一个返回值给bt
❺ C语言BT问题
函数原型 char *strcat(char *dest,char *src);
该函数要做的就是把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0'键基罩)并添加'\0'。返回指向dest的指针。
举例
// strcat.c
#include <syslib.h>
稿闹#include <string.h>
main()
锋塌{
char d[20]="Golden Global";
char *s=" View";
clrscr();
strcat(d,s);
printf("%s",d);
getchar();
return 0;
}
程序执行结果为:
Golden Global View