STL树
前几天觉得STL中没有树和图真是一种莫大的遗憾啊,但是在网上搜了搜,发现其实可以用容器很简单的构造树。
还是废话少说上代码:
struct TreeNode
{
DataType data; // DataType define int
vector<TreeNode> children;
}
就这么简单就可以构造树的节点。
然后我们可以简单的造一颗树
那么我们可以写个CreateTree来创建
void CreateTree(vector<TreeNode>::iterator root)
{
if (root->data < 1) return;
TreeNode *NewNode;
for (int i=1;i<=3;i++)
{
NewNode = new(TreeNode);
NewNode->data = root->data - 1;
root->children.push_back(*NewNode);
delete NewNode;
}
for (vector<TreeNode>::iterator it=root->children.begin(); it!=root->children.end(); it++)
CreateTree(it);
}
当然构造了树在内存中又看不到,所以还得写个dfs输出。
void dfs(vector<TreeNode>::iterator root)
{
std::cout<<" "<<root->data;
if (root->children.empty()) return;
for (vector<TreeNode>::iterator it=root->children.begin(); it!=root->children.end(); it++)
dfs(it);
}
有了树后添加节点神马的就很简单啦
void AddNewNode(vector<TreeNode>::iterator root, DataType d)
{
TreeNode *NewNode;
NewNode = new(TreeNode);
NewNode->data = d;
root->children.push_back(*NewNode);
delete(NewNode);
}
可能有点同学会好奇为神马new了个新的空间后还要delete掉,这是因为所有的STL函数都是实参传形参会将new的空间拷贝一份。为了既然拷贝了那我原来new的那一份空间就没用了,就delete掉了呗。
同样有了树后弄个动态的的图神马的也不是难事。
比如:
vector< vector<DataType> > g0;
当然大家可以类推,像神马
vector< list<int> > g1;
list< list<int> > g2;
然后发现link有个很有用的方法list.unique();可以将同样的元素去掉,大家用的时候注意啊,某些特定的时候会很方便的。当然有各种set也是集合性质的,但set的貌似是高度的二插平衡树。要用到线性的时候还得用list。
以上就是这两天来的学习记录………………
睡觉去了
该文转自http://www.cnblogs.com/gy725/archive/2011/09/28/2194808.html
STL树的更多相关文章
- C++(STL)&&树-堆结构练习——合并果子之哈夫曼树
题目题解:http://blog.csdn.net/xu12110501127/article/details/9199335 有关博客:http://www.360doc.com/content/1 ...
- UVALive 7148 LRIP(树的分治+STL)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- ACM: 强化训练-Inversion Sequence-线段树 or STL·vector
Inversion Sequence Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%lld & %llu D ...
- STL MAP及字典树在关键字统计中的性能分析
转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...
- FZU 2029 买票问题 树状数组+STL
题目链接:买票问题 思路:优先队列维护忍耐度最低的人在队首,leave操作ok. vis数组记录从1到n的编号的人们是不是在队列中,top维护队首的人的编号.pop操作搞定. 然后,check操作就是 ...
- 【BZOJ2333】棘手的操作(左偏树,STL)
[BZOJ2333]棘手的操作(左偏树,STL) 题面 BZOJ上看把... 题解 正如这题的题号 我只能\(2333\) 神TM棘手的题目... 前面的单点/联通块操作 很显然是一个左偏树+标记 ( ...
- 树、图、堆、STL(来自菜鸡的"炒鸡"干粮)
树.图.堆.STL 图论基础 简单图: 没有自环,两个顶点之间最多只有一条边. 完全图: 一个简单图,每两个顶点之间都有一条边.一共有(n-1)*n/2条边. 二分图: 一个简单图,设G=(V,E)是 ...
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- 【BZOJ-4631】踩气球 线段树 + STL
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 224 Solved: 114[Submit][Status][Discuss] ...
随机推荐
- iframe仿ajax图片上传
1.前台页面: iframe_upload.html <html> <body> <form action="upload.php" id=" ...
- EasyDarwin手机直播转发快速显示问题之音频处理过程
前言 在我们前面一篇<EasyDarwin手机直播是如何实现的快速显示视频的方法>中,我们描述到了EasyDarwin流媒体服务器端是如何对视频H.264进行缓冲,再以最快的方式将最新的视 ...
- c++的运算符的重载
1 什么是c++运算符的重载 c++运算符的重载就是说对+.-.>.<等运算符进行重新定义,这样的话,除了基本的类型,所有的类都可以进行基本的运算了,用起来非常方便.特别是用在各种算法中. ...
- UI标签库专题四:JEECG智能开发平台 Upload(上传标签)
1. Upload(上传标签) 1.1. 參数 属性名 类型 描写叙述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null ...
- ABAP 动态内标排序
动态内表怎样排序动态内表怎样排序 动态内表要排序时,因为不知道内表中的字段名字,所以不能直接用SORT table BY field1 field2... 可以使用下面的方法来实现:SORT tab ...
- R in Action(0) 开篇
这几年数据挖掘的火热,也越来越多的人把R作为数据挖掘的一个辅助工具,据国际性组织kkguter统计有60%的人在挖掘过程中用到R工具,可见这个工具是多么的流行,对于数据统计.筛选以及画图绝对是神器.尽 ...
- JVM无法启动,jps无法运行,提示内存不足
原因:系统设置中有设置了不允许over commit so,无法分配足够内存 /etc/sysctl.conf vm.overcommit_memory=1 或者sysctl vm.overco ...
- appium()-The event firing
原文地址:https://github.com/appium/java-client/blob/master/docs/The-event_firing.md since 4.1.0 The purp ...
- javascript Date对象的介绍及linux时间戳如何在javascript中转化成标准时间格式
1.Date对象介绍 Date对象具有多种构造函数.new Date()new Date(milliseconds)new Date(datestring)new Date(year, month)n ...
- Ubuntu增加Swap分区大小
参考:http://blog.csdn.net/mznewfacer/article/details/7334592 以下摘自上述地址内容,并做了点小修改: 1.首先用命令free查看系统内 Swap ...