當前位置:首頁 » 編程語言 » 廣義表c語言

廣義表c語言

發布時間: 2024-12-17 18:17:56

c語言 關於二叉樹的創建和遍歷(中序遍歷)

這個還是我學《數據結構》時做的有關二叉樹的練習呢,本來是全的,包括樹的初始化,建立,遍歷(中序、前序、後序和層次),還有輸出,復制,刪除節點,求深度,樹的刪除等等,看你只問了有關創建和中序遍歷的,所以選了一部分給你,供你參考吧!
#include <stdio.h>
#include <malloc.h>
#define MaxSize 10
#define Number 30
struct BiTNode{//定義數據結構
char data;
BiTNode *lchild,*rchild;
};
void InitBtree(BiTNode * &BT){//初始化二叉樹
BT=NULL;
}
void CreateBiTree(BiTNode *&BT,char *str){//建立二叉樹
BiTNode *s[MaxSize];//這里定義了一個數組用作堆棧方便檢查輸入和操作
int top=-1;
BT=NULL;
BiTNode *p=NULL;
int k, j=0;
char ch;
ch=str[j];
while(ch!='\0'){
switch(ch){
case '(':
top++;
s[top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default:
p=(struct BiTNode *) malloc(sizeof(struct BiTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(BT==NULL)
BT=p;
else{
if(k==1)
s[top]->lchild=p;
else
s[top]->rchild=p;
}
}
j++;
ch=str[j];
}
}
void inorder(BiTNode *BT){//中序遍歷二叉樹——遞歸形式
if(BT!=NULL){
inorder(BT->lchild );
printf("%c ",BT->data);
inorder(BT->rchild );
}
}

void main(){
BiTNode *BT;
printf("以廣義表形式表示輸入的二叉數 (如A(B(C,D),E(,F))的形式)\n\n");
char string[Number]="A(B(,C),D(E(F),G(,H)))";
//如果想要自己輸入,可以將下邊的注釋去掉,然後自己按照廣義表形式輸入,
//(如上例的形式)此處為了方便查看,用了默認的數值
//這里之所以用此種形式(廣義表形式輸入)是為了保證輸入的數組成的二叉樹完全符合你所定義的樹的形狀
/*char string[Number],ch;
int i=0;
ch=getchar();
while(ch!='\n' && i<Number){
string[i]=ch;
i++;
ch=getchar();
}
string[i]='\0';
*/

InitBtree(BT);//初始化二叉樹
CreateBiTree(BT,string);//創建二叉樹
printf("\n中序遍歷二叉樹順序為: ");
inorder(BT);//中序遍歷二叉樹
printf("\n");
}
程序不復雜,所以只是加了必要和最簡單的注釋,相信你看看應該完全可以理解的,祝你進步!

熱點內容
活動上線前伺服器配置要注意什麼 發布:2025-05-15 16:38:43 瀏覽:948
王者榮耀安卓區怎麼免費轉蘋果 發布:2025-05-15 16:18:02 瀏覽:762
威朗pro高配都有哪些配置 發布:2025-05-15 15:57:09 瀏覽:957
資料庫分頁查詢數據 發布:2025-05-15 15:45:13 瀏覽:521
phpmyadmin上傳限制 發布:2025-05-15 15:39:52 瀏覽:432
如何給手機配置真正的電腦 發布:2025-05-15 15:39:52 瀏覽:765
抽腳本命令 發布:2025-05-15 15:39:45 瀏覽:661
sok編程 發布:2025-05-15 15:33:21 瀏覽:41
lms演算法程序 發布:2025-05-15 15:31:53 瀏覽:570
資料庫二級映射 發布:2025-05-15 15:14:09 瀏覽:478