【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 ...
随机推荐
- 数据结构(六)查找---平衡二叉树(ASL)
前提 我们之前的二叉排序树的插入(构建)是按照我们输入的数据来进行的,若是我们的数据分布不同,那么就会构造不同的二叉树 { , , , , , , , , , } { , , , , , , , , ...
- Hbase记录-Hbase shell使用命令
1.进入hbase shell 执行./bin/hbase shell 2.进入后,help 帮助信息,如可以使用help 'create' 3.创建表:create 'test','cf' 表 ...
- Redis主从加Sentinel模式部署
总体部署 一主二从三哨兵 ip地址分配分别为 主 127.0.0.1:6379 从 127.0.0.1:6389 从 127.0.0.1:6399 哨兵 127.0.0.1:26379 哨兵 127. ...
- UVA 10382 Watering Grass(区间覆盖)
n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each spri ...
- mipsel汇编指令学习
MIPS汇编语言基础 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16 ...
- luogu P1943 LocalMaxima_NOI导刊2009提高(1)
又是有关于\(1-n\)排列的题,考虑从大到小依次插入构造排列 对于第\(i\)个数(也就是\(n-i+1\)),只有当它插在当前排列最前面时才会使那个什么数的个数+1,而在最前面的概率为\(\fra ...
- mysql数据库导出excel xml等格式文件
http://jingyan.baidu.com/article/ac6a9a5e43a62e2b653eac83.html
- Android UI组件之自定义控件实现IP地址控件
http://www.cnblogs.com/razerlack/p/4273282.html
- 【windows核心编程】系统消息与自定义钩子(Hook)使用
一.HOOk Hook是程序设计中最为灵活多变的技巧之一,在windows下,Hook有两种含义: 1.系统提供的消息Hook机制 2.自定义的Hook编程技巧 其中,由系统提供的消息钩子机制是由一系 ...
- 利用capability特征加强Linux系统安全【转】
转自:https://blog.csdn.net/fivedragon/article/details/676849 1.简介 UNIX是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权 ...