当前位置:首页 » 编程语言 » 编写建立二叉树的函数c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

编写建立二叉树的函数c语言

发布时间: 2022-12-12 01:01:33

1. 二叉树建立中函数定义与运行(c语言

大多数问题是函数名字写错 了。
#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status CreateBitree(BiTree T);
Status PreOrder(BiTree T);
Status InOrder(BiTree T);

Status CreateBitree(BiTree T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T);
exit(OVERFLOW);
T->data=ch;
CreateBitree(T->lchild);
CreateBitree(T->rchild);
}
return OK;
}

Status PreOrder(BiTree T)
{
if(T){
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
return OK;
}
Status InOrder(BiTree T)
{
if(T){
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
return OK;
}
Status PostOder(BiTree T)
{
if(T){
PostOder(T->lchild);
PostOder(T->rchild);
printf("%c",T->data);
}
return OK;
}
int main()
{
BiTree T={'\0'};
printf("先序建树:依次输入二叉树结点号,孩子为空时输入空格\n");
CreateBitree(T);
printf("\n先序遍历二叉树为:");
PreOrder(T);
printf("\n中序遍历二叉树为:");
InOrder(T);
printf("\n后序遍历二叉树为:");
PostOder(T);
return 0;
}

2. 二叉树c语言实现

#include<iostream.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node *lchild,*rchild;//
}BiTNode,*BiTree;
void CreatBiTree(BiTree &T)
{
char ch;
ch=getchar();
if (ch == ' ')
T = 0;
else {
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;//生成根节点
CreatBiTree(T->lchild);//构造左子树
CreatBiTree(T->rchild);//构造右子树
}
}
void preorder(BiTree T)//前序遍历
{
if (T!=NULL){
printf ("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree T)//中序遍历
{
if (T!=NULL){
inorder(T->lchild);
printf ("%c",T->data);
inorder(T->rchild);
}
}
void postorder(BiTree T)//后序遍历
{
if (T!=NULL){
postorder(T->lchild);
postorder(T->rchild);
printf ("%c",T->data);
}
}
void main ()
{
cout<<"请输入要创建的二叉树包括空格:"<<endl ;
BiTree T;
CreatBiTree(T);//创建二叉树
cout<<"前序遍历的结果为:"<<endl;
preorder(T);
cout<<endl;
cout<<"中序遍历的结果为:"<<endl;
inorder(T);
cout<<endl;
cout<<"后序遍历的结果为:"<<endl;
postorder(T);
}

3. C语言:建立二叉树,在main方法里写代码调试

#include<stdlib.h>
typedefstructnode/*二叉链表结构声明*/
{
structnode*lchild;
chardata;
structnode*rchild;
}bitnode,*bitree;/*bitnode、bitree为该结构体类型*/
bitreeCreatTree()/*创建二叉链表*/
{
chara;
bitreenew;
scanf("%c",&a);
if(a=='#')
returnNULL;
else
{
new=(bitree)malloc(sizeof(bitnode));
new->data=a;
new->lchild=CreatTree();/*递归创建左子树*/
new->rchild=CreatTree();/*递归创建右子树*/
}
returnnew;
}
intbtreedepth(bitreebt)/*自定义函数btreedepth()求二叉树的深度*/
{
intldepth,rdepth;
if(bt==NULL)
return0;
else
{
ldepth=btreedepth(bt->lchild);
rdepth=btreedepth(bt->rchild);
return(ldepth>rdepth?ldepth+1:rdepth+1);
}
}
intncount(bitreebt)/*自定义函数ncount求结点的个数*/
{
if(bt==NULL)
return0;
elsereturn(ncount(bt->lchild)+ncount(bt->rchild)+1);
}
intlcount(bitreebt)/*自定义函数lcount求叶子结点的个数*/
{
if(bt==NULL)
return0;
elseif(bt->lchild==NULL&&bt->rchild==NULL)
return1;
elsereturn(lcount(bt->lchild)+lcount(bt->rchild));
}
voidprint(bitreebt)/*自定义函数print用中序遍历的方式输出二叉树结点内容*/
{
if(bt!=NULL)
{
print(bt->lchild);
printf("%c",bt->data);
print(bt->rchild);
}
}
voidmain()
{
bitreeroot;
root=CreatTree();/*调用函数创建二叉链表*/
printf("contentsofbinarytree: ");
print(root);/*调用函数输出结点内容*/
printf(" depthofbinarytree:%d ",btreedepth(root));/*调用函数输出树的深度*/
printf("thenumberofthenodes:%d ",ncount(root));/*调用函数输出树中结点个数*/
printf("thenumberoftheleafnodes:%d ",lcount(root));/*调用函数输出树中叶子结点个数*/
}

4. 求数据结构(C语言版)建立二叉树的代码~~急~~谢谢了

BT.H文件
#include
<stdio.h>
#include
<malloc.h>
#include
<conio.h>
#define
TRUE
1
#define
FALSE
0
#define
ERROR
0
#define
OK
1
#define
Stack_Size
50
#define
NUM
50
#define
MAXSIZE
50
//队列的最大长度
//定义二叉树
typedef
char
DataType;
typedef
struct
Node
{
DataType
data;
struct
Node
*LChild;
struct
Node
*RChild;
}BiTNode,
*BiTree;
//定义stack
typedef
BiTree
StackElementType;
typedef
struct
{
StackElementType
elem[Stack_Size];
int
top;
}SeqStack;
//定义队列
typedef
BiTree
QueueElementType;
typedef
struct
{
QueueElementType
element[MAXSIZE];
int
front;
int
rear;
}SeqQueue;
//队列的抽象
void
InitQueue(SeqQueue
*Q)
{
Q->front=Q->rear=0;
}
int
EnterQueue(SeqQueue
*Q,
QueueElementType
x)
{
if((Q->rear+1)%MAXSIZE==Q->front)
return(FALSE);
Q->element[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return(TRUE);
}

5. C语言二叉树的建立完整程序谢谢!!!

完整程序自己写吧,我提供个思路:
二叉树的节点包含三个指针:左指针,右指针,字符串链表的头指针;
构造一个通过两个字符串的头指针比较字符窜大小的函数;(先比较串长,再从头对位开始比较);
构造一个插入函数(递归)
最后查找函数(递归)返回查找元素距根的距离;

6. 请教关于建立二叉树程序(c语言的)

修改好了。

1、输入的时候,要对本次输入进行清空一下,以免对后续的输入产生影响
2、创建树的参数,要用指针的指针,否则无法将赋的NULL值,传递出来

正确的程序如下:
#include<stdio.h>
#include<malloc.h>

typedef struct node
{
char data;
struct node *lchild,*rchild;
}Tree;

void Init(Tree **t)
{
char ch;

printf("input a char:\n");
scanf("%c",&ch);
fflush(stdin);

if(ch=='#') (*t)=NULL;
//if(ch=='%')return;
else
{
(*t)=(Tree*)malloc(sizeof(Tree));
(*t)->data=ch;
Init(&(*t)->lchild);
Init(&(*t)->rchild);
}
}

void Xbl(Tree *t)
{
if(t)//while(t)
{
printf("%c ",t->data);
Xbl(t->lchild);
Xbl(t->rchild);
}
}

main()
{
Tree *t;
Init(&t);
Xbl(t);
getchar();
}

7. 用c语言写二叉树,源代码。

二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。
以下代码在Win-Tc1.9.1下编译通过。

#include <stdio.h>
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉树
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根节点
}
//先序遍历二叉树
void PreOrderTraverse(BiTree T){
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

//中序遍历
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getch();
}

8. 如何用C语言创建二叉树

#include<stdio.h>
typedef char TElemType;
typedef struct BiTNode /*结点定义*/
{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;

BiTNode *CreateBiTree()
{
char c;
BiTNode *Root;
scanf("%c",&c);
if(c=='@') Root=NULL;
else{
Root=(BiTNode *)malloc(sizeof(BiTNode));
Root->data=c;
Root->lchild=CreateBiTree();
Root->rchild=CreateBiTree();
}
return(Root);
}

void PrintTree(BiTree T,int h)
{
int i;
if (T){
PrintTree(T->rchild,h+1);
for(i=0;i<h;i++) printf(" ");
printf("%c\n",T->data);
PrintTree(T->lchild,h+1);
}
}

main( )
{
BiTNode* Root;
Root=CreateBiTree();
PrintTree(Root,0);
return 0;
}

9. 二叉树C语言编写

以前序遍历的顺序到中序遍历中查找,会把树分成两个子树,递归处理左和右子树,直到只有单

结点时,输出这个结点。

#include<stdio.h>
/*快速查找*/
intfind_mid[26];

char*post(char*pre,intf,intt){
charroot=*pre;
inti=find_mid[*pre-'A'];
if(f<i)pre=post(pre+1,f,i);
if(i+1<t)pre=post(pre+1,i+1,t);
putchar(root);
returnpre;
}

intmain(){
charpre[26+2]={0};
charmid[26+1];
inti;

while(scanf("%s%s",pre,mid)>0){
for(i=0;mid[i];++i){
find_mid[mid[i]-'A']=i;
}
post(pre,0,i);
putchar(' ');
}
return0;
}