C语言二叉树之二叉链表
来源:互联网 发布:js设置table属性 编辑:程序博客网 时间:2024/06/03 22:18
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>/* 二叉链表 */typedef struct BTNode{ char ch; struct BTNode *lchild, *rchild;}BTNode, *BinTree;BTNode *newBTNode(char ch){ BTNode *node = (BTNode*)malloc(sizeof(BTNode)); node->ch = ch; node->lchild = NULL; node->rchild = NULL;}void addLchild(BinTree *bt, char ch){ BTNode *node = newBTNode(ch); (*bt)->lchild = node;}void addRchild(BinTree *bt, char ch){ BTNode *node = newBTNode(ch); (*bt)->rchild = node;}void priOrder(BinTree bt){ if(bt){ printf("%c",bt->ch); priOrder(bt->lchild); priOrder(bt->rchild); }}void midOrder(BinTree bt){ if(bt){ midOrder(bt->lchild); printf("%c",bt->ch); midOrder(bt->rchild); }}void postOrder(BinTree bt){ if(bt){ postOrder(bt->lchild); postOrder(bt->rchild); printf("%c",bt->ch); }}int main(int argc, char*argv[]){ char ch[11] = {'a','b','c','d','e','f','g','h','i','j','q'}; BinTree bt = (BTNode*)malloc(sizeof(BTNode)); bt->ch = ch[0]; addLchild(&bt, ch[1]); addRchild(&bt, ch[2]); addLchild(&(bt->lchild), ch[3]); addRchild(&(bt->lchild), ch[4]); addLchild(&(bt->rchild), ch[5]); addRchild(&(bt->rchild), ch[6]); printf(" Prior : ");priOrder(bt);printf("\n"); printf("Middle : ");midOrder(bt);printf("\n"); printf(" Post : ");postOrder(bt);printf("\n"); return 0;}
结果:
-bash-4.1$ gcc -o a Demo.c-bash-4.1$ ./a Prior : abdecfgMiddle : dbeafcg Post : debfgca-bash-4.1$
2.二叉链表树的输入(前序、中序、后序):
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>/* 二叉链表 */typedef struct BTNode{ char ch; struct BTNode *lchild, *rchild;}BTNode, *BinTree;BTNode *newBTNode(char ch){ BTNode *node = (BTNode*)malloc(sizeof(BTNode)); node->ch = ch; node->lchild = NULL; node->rchild = NULL;}void addLchild(BinTree *bt, char ch){ BTNode *node = newBTNode(ch); (*bt)->lchild = node;}void addRchild(BinTree *bt, char ch){ BTNode *node = newBTNode(ch); (*bt)->rchild = node;}void priOrder(BinTree bt){ if(bt){ printf("%c",bt->ch); priOrder(bt->lchild); priOrder(bt->rchild); }}void midOrder(BinTree bt){ if(bt){ midOrder(bt->lchild); printf("%c",bt->ch); midOrder(bt->rchild); }}void postOrder(BinTree bt){ if(bt){ postOrder(bt->lchild); postOrder(bt->rchild); printf("%c",bt->ch); }}/* 销毁二叉树T */void destoryBinTree(BinTree *bt){ if(*bt) { if((*bt)->lchild) { destoryBinTree(&(*bt)->lchild); } if((*bt)->rchild) { destoryBinTree(&(*bt)->rchild); } free(*bt); *bt = NULL; }}/* 按前序输入二叉树中结点的值(一个字符) */void priorInputBinTree(BinTree *bt){ char c; scanf("%c",&c); if(c == 'q') { *bt = NULL; } else { *bt = (BinTree)malloc(sizeof(BTNode)); (*bt)->ch = c; priorInputBinTree(&(*bt)->lchild); priorInputBinTree(&(*bt)->rchild); }}/* 按middle序输入二叉树中结点的值(一个字符) */void midInputBinTree(BinTree *bt){ char c; scanf("%c",&c); if(c == 'q') { *bt = NULL; } else { *bt = (BinTree)malloc(sizeof(BTNode)); priorInputBinTree(&(*bt)->lchild); (*bt)->ch = c; priorInputBinTree(&(*bt)->rchild); }}/* 按post序输入二叉树中结点的值(一个字符) */void postInputBinTree(BinTree *bt){ char c; scanf("%c",&c); if(c == 'q') { *bt = NULL; } else { *bt = (BinTree)malloc(sizeof(BTNode)); priorInputBinTree(&(*bt)->lchild); priorInputBinTree(&(*bt)->rchild); (*bt)->ch = c; }}/* 初始条件: 二叉树T存在 *//* 操作结果: 若T为空二叉树,则返回TRUE,否则FALSE */char* BinTreeEmpty(BinTree bt){ if(bt)return "Binary tree isn't empty!";elsereturn "Binary tree is empty!";}/* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */int depthOfBinTree(BinTree bt){ int i, j; if(bt->lchild) { i = depthOfBinTree(bt->lchild); } else i = 0; if(bt->rchild) { j = depthOfBinTree(bt->rchild); } else j = 0; return i>j?++i:++j;}int main(int argc, char*argv[]){ char ch[11] = {'a','b','c','d','e','f','g','h','i','j','q'}; BinTree bt = (BTNode*)malloc(sizeof(BTNode)); bt->ch = ch[0]; addLchild(&bt, ch[1]); addRchild(&bt, ch[2]); addLchild(&(bt->lchild), ch[3]); addRchild(&(bt->lchild), ch[4]); addLchild(&(bt->rchild), ch[5]); addRchild(&(bt->rchild), ch[6]); printf(" Prior : ");priOrder(bt);printf("\n"); printf("Middle : ");midOrder(bt);printf("\n"); printf(" Post : ");postOrder(bt);printf("\n"); destoryBinTree(&bt); printf("%s\n",BinTreeEmpty(bt)); //bt = (BTNode*)malloc(sizeof(BTNode)); //bt->ch = ch[0]; //addLchild(&bt, ch[1]); //addRchild(&bt, ch[2]); priorInputBinTree(&bt); //midInputBinTree(&bt); printf("%s\n",BinTreeEmpty(bt)); printf("The depth of binary tree is %d\n",depthOfBinTree(bt)); printf(" Prior : ");priOrder(bt);printf("\n"); printf("Middle : ");midOrder(bt);printf("\n"); printf(" Post : ");postOrder(bt);printf("\n");return 0;}
结果为:
-bash-4.1$ gcc -o a Demo.c-bash-4.1$ ./a Prior : abdecfgMiddle : dbeafcg Post : debfgcaBinary tree is empty!abdqqeqqcfqqgqqBinary tree isn't empty!The depth of binary tree is 3 Prior : abdecfgMiddle : dbeafcg Post : debfgca-bash-4.1$
值得注意的是二叉树的输入!!!!!!!
阅读全文
0 0
- C语言二叉树之二叉链表
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- C语言数据结构之二叉树
- C语言数据结构之二叉树篇
- C语言 二叉树
- c语言 二叉树
- 二叉树(C语言)
- c语言二叉树
- C语言 二叉树
- 二叉树-C语言
- 二叉树C语言
- 二叉树之二叉链表
- 二叉树之二叉链表
- C语言递归实现二叉链表
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- c语言实现二叉树的基本操作--二叉链表存储
- c 语言 二叉树遍历
- C语言实现二叉树
- 用SQLSever2008R2创建的数据库 怎么附加到 SQLSever2008
- Android样式开发 Shape
- Flask学习(三):SQLAlchemy无法创建数据库
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数
- 使用 Binder IPC
- C语言二叉树之二叉链表
- 最大流问题(转载)-EK算法
- Laravel 5.3 学习系列一:安装、配置
- linux 文件中快速定位
- 171205之JS总结
- Bash Shell
- SpringMVC源码阅读(1)
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换
- James Server 邮件服务器 被人伪造 发送导致Spool 数万封邮件