竞赛中使用的数据结构——二叉树
来源:互联网 发布:淘宝护盾图片怎么授权 编辑:程序博客网 时间:2024/05/29 18:22
看了刘汝佳编写的《算法竞赛入门经典》中的一节(p148),用数组表示一颗二叉树,第一次见到这样的数据结构
#include<cstdio>#include<string>#include<iostream>using namespace std;//根据算法竞赛入门p148实现,节点编号问题见书int rightc[25] = { 0 };//每个节点的左指针int leftc[25] = { 0 };//每个节点的右指针int value[25] = { 0 };//节点的值,0代表节点为空void addnode(int v, char *c)//添加节点{ int k = 1;//初始化操作指针指向数组头元素,x[0]不储存任何值,作为头来使用 int father = 0;//初始化标记,节点k若为左节点,father=1,右节点=2 for (int i = 0; i < strlen(c)-1; i++)//处理指令部分,由于指令中带有“)”,所以处理到上一位 { if (c[i] == 'L')//若向左插入,k=k*2,二叉树节点编号规律 { k = 2 * k; father = 1; } if (c[i] == 'R') { father = 2; k = 2 * k + 1; } } if (strlen(c) == 1)//当输入结束时,输入(),指令处理无法进入循环,另行处理 { k = 1; father = 0; } value[k] = v;//对相应的节点赋值 //修改父节点的指向 if (father == 1) leftc[k / 2] = k; if (father == 2) rightc[(k - 1) / 2] = k;}void input(FILE *p)//输入指令例如(55,RRL)//表示某个节点值为55,位置是从根节点开始的右节点的 右节点的 左节点。{ for (;;) { char c[10]; char m[20]; //scanf("%s", c); fscanf(p,"%s", c); if (strlen(c) == 2) break;//检测到()时结束输入 int v; sscanf(&c[1], "%d", &v); //printf("%d\n", v); char *beg = strchr(c, ',');//“,”开始的位置 memcpy(m, beg+1, strlen(beg));//将“,”后的字符串给m,包含最后的“)” //printf("%s\n", m); addnode(v, m);//插入节点 }}void bfs()//二叉树的广度优先遍历顺序刚好是数组的顺序,遍历数组有值就输出{ for (int i = 0; i < 25; i++) { if (value[i] == 0) continue; else printf("%d ", value[i]); }}void preorder(int k)//先序遍历为例{ printf("%d ", value[k]); if (leftc[k] != 0) preorder(leftc[k]); if (rightc[k] != 0) preorder(rightc[k]);}int main(){ FILE *p; p = fopen("123.txt", "r"); input(p); bfs(); printf("\n"); preorder(1); return 0;}
阅读全文
0 0
- 竞赛中使用的数据结构——二叉树
- 数据结构中关于二叉树的使用
- 数据结构—二叉树
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的操作
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的实现
- 数据结构——二叉树的遍历
- 数据结构——二叉树的特性
- 数据结构——二叉树的类型
- 数据结构——二叉树的直径
- 数据结构—二叉树的构造
- 数据结构 — 二叉树的线索化
- 数据结构—— 二叉树数据结构的节点删除问题
- 算法竞赛入门经典:第六章 数据结构基础 6.9 根据二叉树的后序和中序确定前序序列
- 梦里什么都有(状压DP)
- PYTHON GUI (PyQt5 安装问题解决)
- 2017-12-12 Python selenuim(续)
- 一个大的含有50M个URL的记录,一个小的含有500个URL的记录,找出两个记录里相同的URL。
- vue开发环境搭建以及项目创建
- 竞赛中使用的数据结构——二叉树
- spark_入门(单词统计)
- 水平滚动视图组件HorizontalScrollView
- 设计模式知识连载(10)---继承_6:终极继承者-寄生组合式继承
- 使用属性动画实现星光四射的动画效果
- 并行加密算法系列(二)之AES算法核心
- 使用BeautifulSoup爬取CSDN博客文章
- ssm+redis的工具类
- 海量日志数据,提取出某日访问百度次数最多的那个IP。