二叉樹按層輸出c語言,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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UOYX的頭像UOYX
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29

發表回復

登錄後才能評論