C语言 数据结构 二叉树实现、二叉树的三种递归遍历
生活随笔
收集整理的這篇文章主要介紹了
C语言 数据结构 二叉树实现、二叉树的三种递归遍历
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二叉樹(shù)
在計(jì)算機(jī)科學(xué)中,二叉樹(shù)(英語(yǔ):Binary tree)是每個(gè)節(jié)點(diǎn)最多只有兩個(gè)分支(即不存在分支度大于2的節(jié)點(diǎn))的樹(shù)結(jié)構(gòu)。通常分支被稱(chēng)作“左子樹(shù)”或“右子樹(shù)”。二叉樹(shù)的分支具有左右次序,不能隨意顛倒。
二叉樹(shù)的遍歷:
前序遍歷、中序遍歷、后續(xù)遍歷
以下代碼的二叉樹(shù)圖形表示
代碼
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 10 typedef struct tag {char c;//數(shù)的一個(gè)節(jié)點(diǎn)包含多個(gè)數(shù)據(jù)類(lèi)型,可定義結(jié)構(gòu)體,賦值時(shí)用memcopystruct tag *pleft;struct tag *pright; }Node, *pNode; //前序遍歷:if中要打印的放前面 void preOrder(pNode p) {if (p != NULL){putchar(p->c);//等價(jià)于printf("%c",c);preOrder(p->pleft);preOrder(p->pright);} } //中序遍歷:if中要打印的放中間 void midOrder(pNode p) {if (p != NULL){midOrder(p->pleft);putchar(p->c);midOrder(p->pright);} }//后序遍歷:if中要打印的放后面 void latOrder(pNode p) {if (p != NULL){latOrder(p->pleft);latOrder(p->pright);putchar(p->c);} } int main() {char c[N + 1] = "ABCDEFGHIJ";pNode p[N];//一共有N個(gè)節(jié)點(diǎn),p[N]用于存儲(chǔ)每一個(gè)節(jié)點(diǎn)的地址值pNode tree;//樹(shù)的頭指針int i, j;for (i = 0; i < N; i++)//把每個(gè)字母都放進(jìn)樹(shù)的節(jié)點(diǎn)中{p[i] = (pNode)calloc(1, sizeof(Node));p[i]->c = c[i];}tree = p[0];//樹(shù)的頭指針(樹(shù)根)//以下實(shí)現(xiàn)節(jié)點(diǎn)的連結(jié):廣度優(yōu)先遍歷for (i = 0; i < N; i++)//外層循環(huán)控制往樹(shù)坑里放的節(jié)點(diǎn){for (j = 0; j < i; j++)//內(nèi)層循環(huán)找空閑的樹(shù)坑,放入節(jié)點(diǎn){if (NULL == p[j]->pleft){p[j]->pleft = p[i];break;}if (NULL == p[j]->pright){p[j]->pright = p[i];break;}}}//遍歷打印preOrder(p[0]);//前序遍歷printf("\n");midOrder(p[0]);//中序遍歷printf("\n");latOrder(p[0]);//后序遍歷printf("\n");system("pause"); }輸出
ABDHIEJCFG HDIBJEAFCG HIDJEBFGCA 請(qǐng)按任意鍵繼續(xù). . .VS2017查看監(jiān)視
總結(jié)
以上是生活随笔為你收集整理的C语言 数据结构 二叉树实现、二叉树的三种递归遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言 数据结构 栈(用链表实现)
- 下一篇: C语言排序算法 选择排序 插入排序 快速