二叉樹是一種特殊的樹型結(jié)構(gòu),一般都以二叉樹作為樹型結(jié)構(gòu)學(xué)習(xí)的案例講解。
二叉樹的主要操作有遍歷,例如有先序遍歷、中序遍歷、后序遍歷。在遍歷之前,就是創(chuàng)建一棵二叉樹,當(dāng)然,還需要有刪除二叉樹的算法。
以二叉樹的創(chuàng)建、刪除、先序遍歷為例,實(shí)現(xiàn)代碼如下
#include
#include
typedef char ElemType;
typedef struct node
{ ElemType data;
struct node *lchild, *rchild;
} BTNode;
BTNode * createTree(BTNode *tree){
ElemType e;
fflush(stdin);
scanf("%c", &e);
if(e != '#'){
tree = (BTNode *)malloc(sizeof(BTNode));
tree->data = e; tree->lchild = NULL; tree->rchild = NULL;
tree->lchild = createTree(tree->lchild);
tree->rchild = createTree(tree->rchild);
}
return tree;
}
void DestroyBTree(BTNode *b)
{ if (b==NULL) return ;
else
{ DestroyBTree(b->lchild);
DestroyBTree(b->rchild);
free(b);
}
}
void PreOrder(BTNode *b)
{ if (b!=NULL)
{ printf("%c ",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
int main(){
BTNode *tree = createTree(tree);
PreOrder(tree);
DestroyBTree(tree);
return 0;
}
測(cè)試用例如下
A
B
D
#
G
#
#
#
C
E
#
#
F
#
#
A B D G C E F
以上測(cè)試用的測(cè)試案例,就是上述二叉樹圖形的結(jié)構(gòu),二叉樹構(gòu)成過程中,以先序的方式創(chuàng)建,子樹為空的時(shí)候,輸入為#
上述算法中,還可以做更多的優(yōu)化,每一個(gè)優(yōu)化都是一次進(jìn)步。
審核編輯:劉清
-
二叉樹
+關(guān)注
關(guān)注
0文章
74瀏覽量
12629
發(fā)布評(píng)論請(qǐng)先 登錄
計(jì)算機(jī)二級(jí)二叉樹的問題
基于二叉樹的時(shí)序電路測(cè)試序列設(shè)計(jì)

二叉樹層次遍歷算法的驗(yàn)證

二叉樹,一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型

紅黑樹(Red Black Tree)是一種自平衡的二叉搜索樹

二叉樹操作的相關(guān)知識(shí)和代碼詳解

評(píng)論