【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 ...
随机推荐
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第七课 触发监听器和作业任务监听器
第七课:触发监听器和作业任务监听器 监听器是在调度器中基于事件机制执行操作的对象.你大概可以猜到,触发监听器接收响应跟触发器有关的事件,作业任务监听器接收响应跟作业任务有关的事件. 跟触发器有关的事件 ...
- 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域
- <转载>iTerm2使用技巧
原文链接:http://www.cnblogs.com/756623607-zhang/p/7071281.html 1.设置窗口 定位到 [Preferences - Profiles - Wi ...
- DropEditText
https://blog.csdn.net/jdsjlzx/article/details/46860563 https://github.com/qibin0506/DropEditText ...
- 基于vue-cli的eslint常用设置
.editorconfig 文件详细备注 # 最顶级的配置,相当于根 editorconfig 直到查找到root=true 才会停止查找不然会一直向上查找 root = true # 通配符 表示匹 ...
- GitHub:Awesome-Hacking(黑客技能列表-恶意代码)
0 初衷 GitHub这一份黑客技能列表很不错,包含了多个方向的安全.但目前我关注只有逆向工程与恶意代码,所以其他的被暂时略过. 虽然很感谢作者的辛勤付出,但并不打算复制粘贴全套转载.逐条整理是为了从 ...
- Cython的简单使用
Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这样使Py ...
- lxde 的安装和卸载以及注意事项,lubuntu
安装: $ sudo apt install lxde $ sudo apt install lxde-common 安装完毕后,可能没法关机及logout,可以使用如下安装: $ sudo apt ...
- Zookeeper简介与集群搭建【转】
Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...
- 【转】Oracle 11g安装图文攻略
一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 二.Oracle安装 1. ...