【C语言】 二叉树的基本运算
2024-09-23 13:42:53
• 二叉树节点类型BTNode:
typedef struct node { char data; struct node *lchild, *rchild; } BTNode;
创建二叉树
void CreateBTree(BTNode *&b, char *str) { BTNode *St[MaxSize], *p = NULL; , ch, k, j = ; b = NULL; ch = str[j]; while (ch != '\0') { switch (ch) { ; break; ; break; case ')': --top; break; default: p = (BTNode*)malloc(sizeof(BTNode)); p->data = ch; p->lchild = p->rchild = NULL; if (b == NULL) b = p; else { switch (k) { : St[top]->lchild = p; break; : St[top]->rchild = p; break; } } } ++j; ch = str[j]; } }
输出二叉树
void DispBTree(BTNode *b) { if (b != NULL) { printf(" %c", b ->data); if (b->lchild != NULL || b->rchild != NULL) { printf("("); DispBTree(b->lchild); if (b->rchild != NULL) printf(","); DispBTree(b->rchild); printf(")"); } } }
二叉树的高度:
int HeightBTree(BTNode *b) { if (b != NULL) { int i = HeightBTree(b->lchild); int j = HeightBTree(b->rchild); ) : (j + )); } ; }
二叉树节点个数
int Nodes(BTNode *b) { if (b == NULL) ; else if (b->lchild == NULL && b->rchild == NULL) ; else ); }
二叉树叶子节点
int LeafNodes(BTNode *b) { if (b == NULL) ; else if (b->lchild == NULL && b->rchild == NULL) ; else return (LeafNodes(b->lchild) + LeafNodes(b->rchild) ); }
cpp
#include<stdio.h> #include<malloc.h> #define MaxSize 100 typedef struct node { char data; struct node *lchild, *rchild; } BTNode; void CreateBTree(BTNode *&b, char *str) { BTNode *St[MaxSize], *p = NULL; , ch, k, j = ; b = NULL; ch = str[j]; while (ch != '\0') { switch (ch) { ; break; ; break; case ')': --top; break; default: p = (BTNode*)malloc(sizeof(BTNode)); p->data = ch; p->lchild = p->rchild = NULL; if (b == NULL) b = p; else { switch (k) { : St[top]->lchild = p; break; : St[top]->rchild = p; break; } } } ++j; ch = str[j]; } } void DispBTree(BTNode *b) { if (b != NULL) { printf(" %c", b ->data); if (b->lchild != NULL || b->rchild != NULL) { printf("("); DispBTree(b->lchild); if (b->rchild != NULL) printf(","); DispBTree(b->rchild); printf(")"); } } } int HeightBTree(BTNode *b) { if (b != NULL) { int i = HeightBTree(b->lchild); int j = HeightBTree(b->rchild); ) : (j + )); } ; } int Nodes(BTNode *b) { if (b == NULL) ; else if (b->lchild == NULL && b->rchild == NULL) ; else ); } int LeafNodes(BTNode *b) { if (b == NULL) ; else if (b->lchild == NULL && b->rchild == NULL) ; else return (LeafNodes(b->lchild) + LeafNodes(b->rchild) ); } int level(BTNode *b) { } int main() { BTNode *b; int h; char str[] = "A(B(D(G, H)),C(E(,I), F)"; CreateBTree(b, str); printf("二叉树:"); DispBTree(b); printf("\n"); h = HeightBTree(b); printf("二叉树的高度为:%d\n", h); h = Nodes(b); printf("节点个数: %d\n", h); h = LeafNodes(b); printf("叶子节点个数: %d\n", h); ; }
最新文章
- C#对七牛云的操作
- 【转】NHibernate:no persister for 异常
- Android开发者的Git&;Github(一)
- 使用CSS创建有图标的网站导航菜单
- cocos2d-x回收池原理
- struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
- 转:BZERO()等的区别
- onmousedown活用之碰撞效果
- HTTP相关整理(上)
- Hadoop的介绍、搭建、环境
- Log4net日志使用教程-控制台、文本、数据库三种记录方式
- iOS监听模式系列之本地通知Notification
- 【mac】ansible安装及基础使用
- es6 语法 (字符串扩展)
- (其他)window10上好用的软件
- Python爬虫之多线程下载程序类电子书
- Python sys 模块
- Python数据分析学习目录
- privilege instruction error
- Dajngo的CBV和FBV
热门文章
- iframe伪造ajax
- JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮【转】
- tcp.validnode_checking踩过的坑
- 为什么推荐InnoDB引擎使用自增主键?
- 【1】【JUC】JDK1.8源码分析之ReentrantLock
- PHP7 学习笔记(八)JetBrains PhpStorm 2017.1 x64 MySQL数据库管理工具的使用
- HTML5视频播放插件Video.js使用详解
- 将文本(lrc,txt)文件转换成UTF-8格式
- ettercap中间人攻击--参数介绍
- Android学习笔记——Content Provider(一)