博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树C语言
阅读量:4679 次
发布时间:2019-06-09

本文共 4661 字,大约阅读时间需要 15 分钟。

几乎报价http://blog.csdn.net/hopeyouknow/article/details/6740616。为了这细微的地方进行了修改。他能够执行。

bitree.h

typedef int Item;typedef struct node{	struct node *lchild;	struct node *rchild;	Item	data;}BiTNode, *BiTree;BiTree InitBiTree(BiTNode *root);BiTNode *MakeNode(Item item, BiTNode *lchild, BiTNode *rchild);void FreeNode(BiTNode *pnode);void ClearBiTree(BiTree tree);void DestroyBiTree(BiTree tree);int IsEmpty(BiTree tree);int GetDepth(BiTree tree);BiTree GetRoot(BiTree tree);Item GetItem(BiTNode *pnode);void SetItem(BiTNode *pnode, Item item);BiTree SetLChild(BiTree parent, BiTree lchild);BiTree SetRChild(BiTree parent, BiTree rchild);BiTree GetLchild(BiTree tree);BiTree GetRchild(BiTree tree);BiTree InsertChild(BiTree parent, int lr, BiTree child);void DeleteChild(BiTree parent, int lr);void PreOrderTraverse(BiTree tree, void (*visit)());void InOrderTraverse(BiTree tree, void (*visit)());void PostOrderTraverse(BiTree tree, void (*visit)());
bitree.c

#include "bitree.h"#include 
#include
BiTree InitBiTree(BiTNode *root){ BiTree tree = root; return tree;}BiTNode *MakeNode(Item item, BiTNode *lchild, BiTNode *rchild){ BiTNode *pnode = (BiTNode *)malloc(sizeof(BiTNode)); if(pnode){ pnode->data = item; pnode->lchild = lchild; pnode->rchild = rchild; } return pnode;}void FreeNode(BiTNode *pnode){ if(pnode != NULL) free(pnode);}void ClearBiTree(BiTree tree){ BiTNode *pnode = tree; if(pnode->lchild != NULL) ClearBiTree(pnode->lchild); if(pnode->rchild != NULL) ClearBiTree(pnode->rchild); FreeNode(pnode);}void DestroyBiTree(BiTree tree){ if(tree) ClearBiTree(tree);}IsEmpty(BiTree tree){ if(tree == NULL) return 0; else return 1;}int GetDepth(BiTree tree){ int cd, ld, rd; cd = ld = rd = 0; if(tree){ ld = GetDepth(tree->lchild); rd = GetDepth(tree->rchild); cd = (ld > rd ?

ld : rd); return cd+1; }else return 0; } BiTree GetRoor(BiTree tree) { return tree; } Item GetItem(BiTNode *pnode) { return pnode->data; } void SetItem(BiTNode *pnode, Item item) { pnode->data = item; } BiTree SetLChild(BiTree parent, BiTree lchild) { parent->lchild = lchild; return lchild; } BiTree SetRChild(BiTree parent, BiTree rchild) { parent->rchild = rchild; return rchild; } BiTree GetLchild(BiTree tree) { if(tree) return tree->lchild; return NULL; } BiTree GetRchild(BiTree tree) { if(tree) return tree->rchild; return NULL; } BiTree InsertChild(BiTree parent, int lr, BiTree child) { if(parent){ if(lr == 0 && parent->lchild == NULL){ parent->lchild = child; return child; } if(lr == 1 && parent->lchild == NULL){ parent->rchild = child; return child; } } return NULL; } void DeleteChild(BiTree parent, int lr) { if(parent){ if(lr == 0 && parent->lchild != NULL){ parent->lchild = NULL; FreeNode(parent->lchild); } if(lr == 1 && parent->rchild != NULL){ parent->rchild = NULL; FreeNode(parent->rchild); } } } void PreOrderTraverse(BiTree tree, void (*visit)()) { BiTNode *pnode = tree; if(pnode){ visit(pnode->data); PreOrderTraverse(pnode->lchild, visit); PreOrderTraverse(pnode->rchild, visit); } } void InOrderTraverse(BiTree tree, void (*visit)()) { BiTNode *pnode = tree; if(pnode){ InOrderTraverse(pnode->lchild, visit); visit(pnode->data); InOrderTraverse(pnode->lchild, visit); } } void PostOrderTraverse(BiTree tree, void (*visit)()) { BiTNode *pnode = tree; if(pnode){ PostOrderTraverse(pnode->lchild, visit); PostOrderTraverse(pnode->lchild, visit); visit(pnode->data); } }

test.c

#include "bitree.h"#include 
void print(Item item){ printf("%d ", item);}main(){ BiTNode *n1 = MakeNode(10, NULL, NULL); BiTNode *n2 = MakeNode(20, NULL, NULL); BiTNode *n3 = MakeNode(30, n1, n2); BiTNode *n4 = MakeNode(40, NULL, NULL); BiTNode *n5 = MakeNode(50, NULL, NULL); BiTNode *n6 = MakeNode(60, n4, n5); BiTNode *n7 = MakeNode(70, NULL, NULL); BiTree tree = InitBiTree(n7); SetLChild(tree, n3); SetRChild(tree, n6); printf("the depth of the tree is %d.\n", GetDepth(tree)); printf("preorderTraverse:\n"); PreOrderTraverse(tree, print); putchar('\n'); printf("inorderTraverse:\n"); InOrderTraverse(tree, print); putchar('\n'); printf("postorderTraverse:\n"); PostOrderTraverse(tree, print); putchar('\n'); DeleteChild(tree, 1); printf("postorderTraverse:\n"); PostOrderTraverse(tree, print); DestroyBiTree(tree); if(IsEmpty(tree)) printf("the tree is empty!\n"); return 0;}
编译:gcc test.c bitree.c

执行:./a.out

执行结果:

the depth of the tree is 3.preorderTraverse:70 30 10 20 60 40 50 inorderTraverse:10 30 10 70 10 30 10 postorderTraverse:10 10 30 10 10 30 70 postorderTraverse:10 10 30 10 10 30 70 the tree is empty!

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4665008.html

你可能感兴趣的文章
android WIFI
查看>>
常用的匹配正则表达式和实例
查看>>
小组成员及其git链接
查看>>
SQL case when else
查看>>
JAVA学习之路(环境配置,)
查看>>
Task.WaitAll代替WaitHandle.WaitAll
查看>>
MVc Identity登陆锁定
查看>>
cdn连接失败是什么意思_关于CDN的原理、术语和应用场景那些事
查看>>
ultraedit26 运行的是试用模式_免费试用U盘数据恢复工具 – 轻松找回U盘丢失的各种数据!...
查看>>
怎么从转移特性曲线上看dibl_白话IVD中的流体——泵的流量特性与管路阻力特性...
查看>>
奈奎斯特与香农定理_通俗理解奈奎斯特带宽
查看>>
ercharts一个页面能放几个_谷歌优化排名网站内页,一般放置几个关键词?
查看>>
redirect路由配置 vue_Vue 动态生成路由结构
查看>>
maven仲裁机制_Maven 基础知识依赖机制
查看>>
canvas绘制四分之一圆_用canvas画太极图(一步步详解附带源代码)
查看>>
计算上个月的第一天和最后一天_20年的最后一场旅行,21年的第一场旅行
查看>>
抄表 软件_水表远程抄表方案 M-BUS NB-IOT LoRa有什么区别呢
查看>>
一般柱子与柱子的距离_建筑内部布置柱子 间距大概是多少?
查看>>
python比excel好在哪_在数据分析方面,比起python,excel的局限性在哪(python excle 图表)...
查看>>
python 语言爱好者_语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...
查看>>