本文目錄一覽:
- 1、請問如何用c語言實現二叉樹的按層錄入
- 2、實現二叉樹的層次遍歷用c語言!不要c++
- 3、用c語言實現二叉樹的程序,可以輸入輸出和遍歷
- 4、用C語言編程 :建立三層二叉樹,先根遍歷輸出,在線求高手
- 5、c語言廣義表形式輸入二叉樹,從下到上按層列印改樹; 不知道哪錯了,請各位大俠幫幫忙!
請問如何用c語言實現二叉樹的按層錄入
#includestdio.h
#includestdlib.h
#includestring.h
#define MaxSize 1024
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;
static char a[1024];
void create(BTnode *b,int m,int i)
{
if(ima[i]!=’ ‘)
{
b=(BTnode*)malloc(sizeof(BTnode));
b-data=a[i];
b-lchild=b-rchild=NULL;
create(b-lchild,m,2*i);
create(b-rchild,m,2*i+1);
}
}
void print(BTnode *b)
{
BTnode *p=b;
if(p!=NULL)
{
printf(“%c”,p-data);
if(p-lchild!=NULL||p-rchild!=NULL)
{
printf(“(“);
print(b-lchild);
if(p-rchild!=NULL)
{
printf(“,”);
print(b-rchild);
}
printf(“)”);
}
}
}
int main()
{
BTnode *b;
int j,m=1;
char s[1024],*p;
printf(“以字元串形式輸入第一層節點(根節點):\n”);
gets(s);
while(strlen(s)!=0)
{
j=m;
p=s;
while(m2*j)
{
a[m]=*p;
p++;
m++;
}
printf(“以字元串形式輸入下一層節點(空節點以空格表示):\n”);
gets(s);
}
create(b,m,1);
printf(“以二叉鏈表表示形式輸出二叉樹:\n”);
print(b);
printf(“\n\n”);
system(“pause”);
}
實現二叉樹的層次遍歷用c語言!不要c++
#includestdio.h
#includemalloc.h
//***********************************************************************
//定義二叉樹
typedef struct tree{
char data;
struct tree *lchild,*rchild ;
}Tree,*Ptree;
//***********************************************************************
//定義隊列
typedef struct queue_{
Ptree data[100];
int front,rear;
}Dqueue,*Pqueue;
//***********************************************************************
//建立二叉樹 先根建立
Ptree CreateTree(Ptree N)
{
Ptree T=NULL ;
char c;
c = getchar();
if(c==’#’)
return NULL;
T = (Ptree)malloc(sizeof(tree));
T-data = c;
T-lchild=CreateTree(T);
T-rchild=CreateTree(T);
return T;
}
//刪除二叉樹
void DeleteTree(Ptree *T)
{
if(*T ==NULL)
return ;
if((*T)-lchild == NULL (*T)-rchild == NULL)
{
free(*T);
*T = NULL;
}
else
{
DeleteTree((*T)-lchild);
DeleteTree((*T)-rchild);
}
}
//***********************************************************************
//初始化隊列
Pqueue initQueue()
{
Pqueue p;
p=(Pqueue)malloc(sizeof(Dqueue));
if(p)
{
p-front=0;
p-rear=0;
}
return p;
}
//***********************************************************************
//判斷隊列是否為空
int emptyQueue(Pqueue p)
{
if(p-front==p-rear)
return 1;
else
return 0;
}
//***********************************************************************
//入隊
void inQueue(Pqueue p,Ptree t)
{
p-rear=(p-rear+1)%100;
p-data[p-rear]=t;
}
//***********************************************************************
//出隊
void outQueue(Pqueue p,Ptree* t)
{
p-front=(p-front+1)%100;
*t=p-data[p-front];
}
//***********************************************************************
//層次遍歷
void levelOrder(Ptree t)
{
Ptree p=t;
Pqueue Q=NULL;
if(p)
{
Q=initQueue();//初始化隊列
printf(“%c”,p-data);
inQueue(Q,p);
while(!emptyQueue(Q))//當隊列不為空
{
outQueue(Q,p);//出隊
if(p-lchild)
{
printf(“%c”,p-lchild-data);
inQueue(Q,p-lchild);//進隊
}
if(p-rchild)
{
printf(“%c”,p-rchild-data);
inQueue(Q,p-rchild);//進隊
}
}
free(Q);
}
}
int main()
{
Ptree t;
printf(“先根建立二叉樹:(結點值為字元,空結點以#表示)”);
t = CreateTree(NULL);
printf(“層遍歷二叉樹:\n”);
levelOrder(t);
DeleteTree(t);
return 0;
}
用c語言實現二叉樹的程序,可以輸入輸出和遍歷
#include stdio.h
#include stdlib.h
#include iostream.h
const int MaxLength=10;//結點個數不超過10個
typedef struct tree
{
char data;
struct tree *lchild,*rchild;
}tree;
//先序遞歸 建立二叉樹
void Createbitree(tree* T)
{
char ch;
ch=getchar();
if(ch==’#’)
T=NULL;
else
{
T=(tree*)malloc(sizeof(tree));
T-data =ch;
Createbitree(T-lchild );
Createbitree(T-rchild );
}
}
//先序遞歸遍歷
void PreOrderTraverse(tree* T)
{
if(T)
{
coutT-data;
PreOrderTraverse(T-lchild);
PreOrderTraverse(T-rchild);
}
}
//中序遞歸遍歷
void InOrderTraverse(tree* T)
{
if(T)
{
InOrderTraverse(T-lchild);
coutT-data;
InOrderTraverse(T-rchild);
}
}
void PostOrderTraverse(tree* T)
{
if(T)
{
PostOrderTraverse(T-lchild);
PostOrderTraverse(T-rchild);
coutT-data;
}
}
//層序遍歷
void LevelOrderTraverse(tree* T)
{
tree* Q[MaxLength];
int front=0,rear=0;
tree* p;
if(T)//根結點入隊
{
Q[rear]=T;
rear=(rear+1)%MaxLength;
}
while(front!=rear)
{
p=Q[front]; //隊頭元素出隊
front=(front+1)%MaxLength;
coutp-data;
if(p-lchild)//左孩子不為空,入隊
{
Q[rear]=p-lchild;
rear=(rear+1)%MaxLength;
}
if(p-rchild)//右孩子不為空,入隊
{
Q[rear]=p-rchild;
rear=(rear+1)%MaxLength;
}
}
}
//主函數
void main()
{
cout”請按先序次序輸入二叉樹的數據:”endl;
tree* T;
Createbitree(T);
cout”二叉樹的先序序列為:”endl;
PreOrderTraverse(T);
coutendl”二叉樹的中序序列為:”endl;
InOrderTraverse(T);
coutendl”二叉樹的後序序列為:”endl;
PostOrderTraverse(T);
coutendl”二叉樹的層序序列為:”endl;
LevelOrderTraverse(T);
coutendl;
}
比如 1
2 3
4 5 6 7
按先序輸入是124##5##36##7##
用C語言編程 :建立三層二叉樹,先根遍歷輸出,在線求高手
A
(B C)
(D E) (F G)
以這課樹為例
#include stdio.h
#include stdlib.h
typedef char Elem;
typedef struct Node
{
Elem data;
struct Node *pLchild;
struct Node *pRchild;
}BTreeNode, *BTree;
BTree CreateBTree(BTree T, Elem *str)//創建二叉樹
{
static int i = 0;
if (‘0’ == str[i])
{
T = NULL;
}
else
{
T = (BTree) malloc (sizeof(BTreeNode));
T-data = str[i++];
T-pLchild = CreateBTree(T-pLchild, str);
i++;
T-pRchild = CreateBTree(T-pRchild, str);
}
return T;
}
void PostTraverseBTree(BTree T)//後序
{
if (NULL != T)
{
PostTraverseBTree(T-pLchild);
PostTraverseBTree(T-pRchild);
printf(“%c “, T-data);
}
}
void InTraverseBTree(BTree T)//中序
{
if (NULL != T)
{
InTraverseBTree(T-pLchild);
printf(“%c “, T-data);
InTraverseBTree(T-pRchild);
}
}
void PreTraverseBTree(BTree T)//先序
{
if (NULL != T)
{
printf(“%c “, T-data);
PreTraverseBTree(T-pLchild);
PreTraverseBTree(T-pRchild);
}
}
int main(void)
{
BTree T = NULL;
Elem str[] = “ABD00E00CF00G00”;
T = CreateBTree(T, str);
printf(“\n\n”);
printf(“先序遍歷:\n”);
PreTraverseBTree(T);
printf(“\n\n”);
printf(“中序遍歷:\n”);
InTraverseBTree(T);
printf(“\n\n”);
printf(“後序遍歷:\n”);
PostTraverseBTree(T);
printf(“\n\n”);
}
c語言廣義表形式輸入二叉樹,從下到上按層列印改樹; 不知道哪錯了,請各位大俠幫幫忙!
太長了 懶得看 給你看我的把
#include “stdio.h”
#include “malloc.h”
#define MaxSize 20
typedef struct tnode
{
int data;
struct tnode *lchild,*rchild;
}BTNode;
//建立二叉樹運算演算法
void CreatBTree(BTNode *bt,char *str)
{
BTNode *St[MaxSize],*p=NULL;
int top=-1,k,j=0;
char ch;
bt=NULL; //建立的二叉樹初始化時為空
ch=str[0];
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(bt==NULL) //p為二叉樹的根結點
bt=p;
else //已建立二叉樹根結點
{
switch(k)
{
case 1: St[top]-lchild =p;break;
case 2: St[top]-rchild =p;break;
}
}
}
j++;ch=str[j];
}
}
//求二叉樹高度運算演算法(遞歸法)
int BTHeight(BTNode *bt)
{
int lchilddep,rchilddep;
if(bt==NULL) //空樹高度為0
return 0;
else
{
lchilddep=BTHeight(bt-lchild);//求左子樹的高度
rchilddep=BTHeight(bt-rchild);//求右子樹的高度
return (lchilddeprchilddep)?(lchilddep+1):(rchilddep+1);
}
}
//求二叉樹結點個數運算演算法(遞歸法)
int NodeCount(BTNode *bt)
{
int num1,num2;
if(bt==NULL) //空樹結點個數為0
return 0;
else
{
num1=NodeCount(bt-lchild ); //求出左子樹的結點樹
num2=NodeCount(bt-rchild ); //求出右子樹的結點樹
return (num1+num2+1);
}
}
//求二叉樹葉子結點個數運算演算法(遞歸法)
int LeafCount(BTNode *bt)
{
int num1,num2;
if(bt==NULL)
return 0; //空樹葉子結點個數為0
else if(bt-lchild ==NULLbt-rchild ==NULL)
return 1; //若為葉子結點返回1
else
{
num1=LeafCount(bt-lchild ); //求出左子樹的葉子結點樹
num2=LeafCount(bt-rchild ); //求出右子樹的葉子結點樹
return num1+num2;
}
}
//以括弧表示法輸出二叉樹運算演算法(遞歸法)
void DispBTree(BTNode *bt)
{
if(bt!=NULL)
{
printf(“%c”,bt-data);
if(bt-lchild !=NULL || bt-rchild!=NULL)
{
printf(“(“);
DispBTree(bt-lchild ); //以遞歸法處理左子樹
if(bt-rchild !=NULL)
printf(“,”);
DispBTree(bt-rchild ); //以遞歸法處理右子樹
printf(“)”);
}
}
}
//先序遍歷
void PreOrder(BTNode *bt)
{
if(bt!=NULL)
{
printf(“%c”,bt-data );
PreOrder(bt-lchild );
PreOrder(bt-rchild );
}
}
//中序遍歷
void InOrder(BTNode *bt)
{
if(bt!=NULL)
{
InOrder(bt-lchild );
printf(“%c”,bt-data );
InOrder(bt-rchild );
}
}
//後序遍歷
void PostOrder(BTNode *bt)
{
if(bt!=NULL)
{
PostOrder(bt-lchild );
PostOrder(bt-rchild );
printf(“%c”,bt-data );
}
}
int main() //主函數
{
BTNode *bt;
CreatBTree(bt,”A(B(D,E(G,H),C(,F(I)))”);
printf(“二叉數bt以括弧法顯示為: “); DispBTree(bt);printf(“\n”);
printf(“先序發遍歷二叉數bt為: “); PreOrder(bt); printf(“\n”);
printf(“中序發遍歷二叉數bt為: “); InOrder(bt); printf(“\n”);
printf(“後序發遍歷二叉數bt為: “); PostOrder(bt); printf(“\n”);
printf(“二叉數bt的高度為: %d\n”, BTHeight(bt));
printf(“二叉數bt的結點數為: %d\n”, NodeCount(bt));
printf(“二叉數bt的葉子結點數為: %d\n”, LeafCount(bt));
printf(“\n”);
return 0;
}
原創文章,作者:UOYX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136806.html