【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 ...
随机推荐
- java8的新特性详解-----------Lamda表达式
java8最大的亮点就是引入了Lamda表达式 , 函数式编程的概念 具体啥意思我也不知道.只管用就行了,非常的强大,简洁,一个表达式相当于以前的十几行代码 因为之前要实现这种效果全靠if el ...
- javascript 伪数组与标准数组
伪数组 1. 是一个对象 2. 必须有length 属性,length 值是number 类型 3. 如果这个对象的length 不为0,那么必须要有按照下标存储的数据 标准数组 判断数据是否是标准数 ...
- JavaScript数组倒序函数reverse()
左边为原数组,右边为array.reverse()的结果: 函数很简单,但是 var temp = ChartConfig.getMonthData(); $scope.monthList = tem ...
- C#检测鼠标移动消息
当C#窗口上有其它控件时,窗口本身检测不到消息.1.使用WndProc.MouseMove不行,比如 protected override void WndProc(ref Message m) { ...
- C# PointToScreen
子窗体定位时,如果主窗口不在左上角,需要根据主窗口的坐标,相减才行. Point p1 = Label.PointToScreen(new Point(0, 0)); p1.X -= this.X; ...
- readline.c
一.第一版 #include <unistd.h> #include <errno.h> ssize_t readline(int fd, void *vptr, size_t ...
- CentOS6.8安装配置sonarqube6.4
下载最新版本的sonar(现在改名叫sonarqube) https://www.sonarqube.org/downloads/ 我下载的版本是Sonarqube6.4 1 使用前需要 ...
- react框架的状态管理
安装: cnpm install --save redux cnpm install --save react-redux 安装好后导入模块内容: impor {createStore} from ...
- 深入剖析ThreadLocal实现原理以及内存泄漏问题
关于ThreadLocalMap<ThreadLocal, Object>弱引用问题: 当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMa ...
- SpringBoot几个重要的事件回调、监听机制
(1).需要配置在META-INF/Spring.factories 1.ApplicationContextInitializer // // Source code recreated from ...