【C语言】 二叉树的基本运算
• 二叉树节点类型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语言】 二叉树的基本运算的更多相关文章
- Hello world!(内含自己编写的C语言二叉树同学录)
修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择. 在同学的推荐下,来到博客园来找志同道合的人交流代码.3个月后参加蓝桥杯 ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- C语言二叉树的建立与遍历
二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...
- [数据结构]C语言二叉树的实现
树和图是数据结构中比较麻烦的东西,里面涉及的概念比较多,也最有用, 就比如一般树广泛应用于人工智能的博弈上,而基于图的广度优先和深度优先搜索也广泛应用于人工智能寻路上面 首先我们要把树进行分类: &g ...
- Go语言二叉树定义及遍历算法实现
// binary_tree 二叉树 package Algorithm import ( "reflect" ) // 二叉树定义 type BinaryTree struct ...
- R语言---- 数据的基本运算
一.基本运算符号 1.基本数学计算 +.-.*./.^.%%(求模).%/%(整除)注意:求模运算两边若为小数,则整数和小数部分分别求模.例:5.6%%2.2 2.比较运算 >.<.> ...
- C语言——栈的基本运算在顺序栈上的实现
头文件 Seqstack.h #define maxsize 6 //const int maxsize = 6; // 顺序栈 typedef struct seqstack { int data[ ...
- java 实现二叉树结构基本运算详细代码
static final int MAXLEN = 20; //最大长度 class CBTType //定义二叉树节点类型 { String data; //元素数据 CBTType left; / ...
- C语言二叉树的创建、(先中后序)遍历以及存在的问题
#include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...
随机推荐
- SQL 对大小写不敏感!
一定要记住,SQL 对大小写不敏感!
- node.js 笔记
教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...
- 在安卓上用Termux安装sqlmap
1.打开Termux执行以下命令 apt update apt install git apt install python2 // 安装sqlmap运行环境 2.从github上下载sqlmap , ...
- QLabel-标签控件的应用
label = QLabel('我是李明') #创建标签控件对象.参数:标签中要显示的文本 label.setText('我是明明') 修改标签控件显示的文本 self.label.text() 返回 ...
- ABAP知识点笔记
1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...
- 青云VPC网络配置
1 创建VPC网络 2 申请公网IP 3 回到VPC图形界面绑定公网ip 4 创建私有网络,并绑定私有网络 5 创建3台主机 6 新建防火墙,并绑定到VPC 7 配置VPC端口转发规则 8 添加防火墙 ...
- IO流总结笔记一
IO流继承关系图 IO概述 IO流是用来处理设备上数据的输入输出. 具体设备有:硬盘,内存,键盘录入等等. IO流的具体分类: 1,根据处理的数据类型不同分为:字节流和字符流,字节流读取的最小单位 ...
- SRS服务器搭建,ffmpeg 本地推流,srs从本地拉流
参考: https://github.com/ossrs/srs/wiki/v2_CN_SampleFFMPEG git clone https://github.com/ossrs/srs cd s ...
- 一份通过IPC$和lpk.dll感染方式的病毒分析报告
样本来自52pojie论坛,从事过两年渗透开始学病毒分析后看到IPC$真是再熟悉不过. 1.样本概况 1.1 样本信息 病毒名称:3601.exe MD5值:96043b8dcc7a977b16a28 ...
- gdb 调试入门,大牛写的高质量指南
引用自:http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调 ...