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] ...
随机推荐
- 浅析嵌入式C优化技巧
嵌入式C语言优化小技巧 1 概述 嵌入式系统是指完毕一种或几种特定功能的计算机系统,具有自己主动化程度高,响应速度快等长处,眼下已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环 ...
- nanoporetech/nanonet
nanoporetech/nanonet CodeIssues 7Pull requests 0Projects 0Wiki Insights First generation RNN baseca ...
- ANDROID STUDIO 2.2.3 DOWNLOAD FROM DL.GOOGLE.COM
立即开始使用 Android Studio Android Studio 包含用于构建 Android 应用所需的所有工具. 下载 ANDROID STUDIO2.2.3 FOR WINDOWS (1 ...
- ASP.NET MVC模式——WebPages
WebPages 示例 123456<html> <body> <h1>Hello Web Pages</h1> <p>The time i ...
- 网络爬虫(蜘蛛)Scrapy,Python安装!
Scrapy,Python安装.使用! 1.下载安装Python2.7.6.由于Scrapy还不支持3.x版本号. Latest Python 2 Release - Python 2.7.6,安装时 ...
- 在VS2015中增加JQuery引用及智能提示
打开VS2015,从"工具"菜单选择NuGet选项,搜索Jquery,并点击安装. 可以看到解决方案的scripts增加了对应文件的引用 在HTML文件中可以直接引用j ...
- (转)c#(wince)中使用多线程访问winform中控件的问题
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...
- mac gem命令
$ gem sources -r https://rubygems.org/ (移除旧版本的镜像,如果你不知道你电脑上目前用的是什么镜像,可用 $ gem sources -l 来查看) $ g ...
- windows 复制 文本文件内容 到剪切板
shell 打开 type filename | clip
- 使用 Visual Studio Code 运行 C# 及 Java 程序
背景 很多情况下,我只是想要编写一个非常简单的 C# 或者 Java 程序,只有几行代码,看看运行结果而已.虽说 Visual Studio / Eclipse / IntelliJ IDEA 功能强 ...