當前位置:首頁 » 編程語言 » 編寫建立二叉樹的函數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;
}