【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 ...
随机推荐
- PHP5.5+Nginx1.9
1. 安装Nginx:http://www.cnblogs.com/vurtne-lu/p/7010065.html 2. 编译安装 [root@zabbix opt]# wget http://cn ...
- MQ问题
大部分的处理方案: 1.重试 2.定时任务 3.幂等
- 关于JS事件冒泡与JS事件代理(事件委托)
连接:https://blog.csdn.net/supercoooooder/article/details/52190100 核心代码: <ul id="parentUl" ...
- div 只显示两行超出部分隐藏
; -webkit-box-orient: vertical;line-height: 26px } <td rowspan="2" colspan="2" ...
- vue pc端网站项目开发坑点与难度记录
背景 在一pc端的web项目里,由于某些特性需要由动态语言处理,所以只在有需要使用vue来处理数据的页面,直接引入vue.js来处理.由于刚开始并没有打算使用前端来渲染数据和处理交互,所以使用了一些非 ...
- SpringMVC跨重定向请求传递数据
(1)使用URL模板以路径变量和查询参数的形式传递数据(一些简单的数据) @GetMapping("/home/index") public String index(Model ...
- List Control控件
List Control控件 显示方式 属性[View]选择成[Report]. 添加成员变量 绑定变量:m_listCtrl 设置值 // 表头添加 m_listCtrl.SetExtendedSt ...
- mybatis框架之foreach标签
foreach一共有三种类型,分别为List,[](array),Map三种,下面表格是我总结的各个属性的用途和注意点. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径 ...
- HTML表格的简单使用1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- zabbix监控短信息接口是否正常
1.创建Web scenarios 2.创建zabbix触发器name:short_message send status is not 100 Expression:{u04zbx01.yaya.c ...