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。

以上就是这两天来的学习记录………………

睡觉去了






转载于:https://www.cnblogs.com/gy725/archive/2011/09/28/2194808.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值