【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 ...
随机推荐
- cdqz2017-test11-奇诺之旅(拟阵)
解为基环树森林 证明其具有拟阵的性质: 1.空集独立 2.基环树森林的子集仍然是基环树森林,满足遗传特性 3.对于基环树森林A,B,若|A|<|B| (边数),一定可以找到一条边e∈B,∉A,使 ...
- 动态生成js数据Response.Expires=1440竟然无效?
项目当中有一些数据,比如多语言翻译,要求做语言包,起初当然是做成i18n.js文件,但是每个阶段版本更新都会增加一些key,那么发布的时候只能给<script>的src增加?2018091 ...
- PB9.0数据窗口入门
因为工作的关系,最近公司用PB比较多,至少10年没用过PB了,回顾一下数据窗口使用方法.1.代码结构 2.数据窗口 3.代码窗口代码 APP入口代码 4.需要使用DataBase插入一条数据 5.执行 ...
- python - classs内置方法 solt
solt # __solt__ # 是一个类变量,变量值可以是列表.元组或者是可迭代对象,也可以是一个字符串 # (以为这所有实例只有一种数据属性) # # 作用:(为了节省内存空间,减少过多的实例属 ...
- geeksforgeeks-Array-Rotate and delete
As usual Babul is again back with his problem and now with numbers. He thought of an array of number ...
- 如何调整cell的大小
一般情况下,我们使用tableview的时候从来没有设置过cell的大小(w,h).位置(x,y)等,而是系统直接给我们自动生成,但是有的时候我们可能会改动cell的大小及位置,比如:在适配ios6跟 ...
- ROS 时间同步问题
0. 问题 两台ubuntu主机无法与一台debian主机使用分布式通信,摄像头发出的话题机器人收不到,考虑是时间同步的问题. 也可能是系统不统一的问题; 今天在家实验了一下,时间差6min,照样可以 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- c# 取本地ip地址
public static System.Net.IPAddress[] GetIpAddress() { string hostName = System.Net.Dns.GetHostName() ...
- Win10 + VS2017 15.5.6 环境下解决 Python 3.6 环境无法刷新DB的问题
作为宇宙第一IDE,VS2017对Python的支持还算可以,虽然和PyCharm等Python专用IDE相比还有些差距,但是经过后续的更新升级,我相信VS2017将越来越完善.由于本人一直都是使用V ...