【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 ...
随机推荐
- Hi3519v101-uboot-start.S分析
00032: #include <config.h>00033: #include <version.h> 1)#include <config.h>.config ...
- Hbase记录-HBase基本操作(二)
HBase Exists 可以使用exists命令验证表的存在.下面的示例演示了如何使用这个命令. hbase(main):024:0> exists 'emp' Table emp doe ...
- Spring架构简单描述
原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻量级Java SE(Jav ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- Jquery中click事件重复执行的问题
平常没注意事件绑定问题,在此注意一下: function testClick(obj){ $("select").off().on("click", funct ...
- 我的Mac中毒了,病毒居然叫做MacPerformance
禁用 ReportCrash 直接干掉进程肯定不管用,从名字就知道这个进程会自动被触发,除非修改系统配置. Google 了一下,发现很简单,在 terminal 里执行 launchctl unlo ...
- android 加载图片
package mydemo.mycom.demo2; import android.graphics.Bitmap; import android.graphics.BitmapFactory; i ...
- django学习~models之查询
一 简介:今天学习models查询的一些东西 二 理解概念 Queryset 定义 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet 三 细节学习 一 常用的models函数 . ...
- python - 包装 和 授权
包装 # 包装(二次加工标准类型) # 继承 + 派生 的方式实现 定制功能 # 示例: # class list_customization(list): #重新定制append方法,判断添加的数据 ...
- jquery中选择checkbox拼接成字符串,然后到后台拆分取值
jquery中选择checkbox拼接成字符串,然后到后台拆分取值 js中的代码 $("#btn").click(function(){ var chenked=$("i ...