【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 ...
随机推荐
- 关于spring事务
https://www.cnblogs.com/caoyc/p/5632963.html 这一篇博客讲的很清楚,一些参数和事务的概念 在serveice层中 每个方法都要写上关于事务的注解.这两个 ...
- 查看windows下指定的端口是否开放
有时候会出现ip ping的通 但是就是连接不上的情况.这时候我们需要检测一下这个端口是否被开放 netstat -ano -p tcp | find >nul && ec ...
- PageRank简单实现中的一个错误
在我的一篇博客PageRank中,在5.1 算法实现中简单实现部分原本是有一个错误的.这个错误也体现出我当时对PageRank算法有理解上的偏差. 这是个什么样的错误呢?是这样的: 简单实现中计算每个 ...
- 日历控件QCalendarWidget
样式:
- JavaScript之不规则Table转化为可定点索引td节点的网格矩阵【插件】
由于解析课程表的缘故,有如下需求: 1. 将任意表格解析成独立的单元格矩阵[本次博文的缘由] 2. 根据矩阵坐标,确定任意一格的节点 /* 表格-->网格化 标记表格的位置及其对应的节点 * ...
- 2、SpringBoot接口Http协议开发实战8节课(1-6)
1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是 ...
- 批量下载Coursera及其他场景上的文件
以下方法同样适用于其他场景的批量下载. 最近在学习Coursera退出的深度学习课程,我希望把课程提供的作业下载下来以备以后复习,但是课程有很多文件,比如说脸部识别一课中的参数就多达226个csv文件 ...
- Java注解之Retention、Documented、Target、Inherited介绍
先看代码,后面一个个来解析: @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType. ...
- python 历险记(一)— python 的String,集合(List,元组,Dict)
目录 引言 String 有哪些有用的方法? 如何拼接字符串? 如何分隔字符串? 如何获取字符串长度 如何将 list 拼接成字符串? 如何替换字符串? 如何去除字符串中的空格? 如何子字符串是否包含 ...
- 创建虚拟机时,提示No valid host was found解决办法
1.http://blog.csdn.net/yxwmzouzou/article/details/43892261 2.http://www.cnblogs.com/kevingrace/p/601 ...