首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
利用包装器以及lambda表达式实现二叉查找树
时间:
2015-04-26 09:19:05
阅读:
122
评论:
0
收藏:
0
[点我收藏+]
标签:
#include<iostream>
#include<functional>
using namespace std;
template <class T>
class tree
{
private:
struct Node
{
T data;
Node* L;
Node* R;
Node(T d) :data(d), L(NULL), R(NULL){}
};
Node* root;
int Count;
public:
tree() :root(NULL), Count(0){}
tree& Insert(T d)
{
function<tree&(Node*&, T&)> ins = [&](Node*& r, T& dd)->tree&
{
if (r == NULL)
{
r = new Node(dd);
return *this;
}
else if (dd < r->data)
{
return ins(r->L, dd);
}
else
{
return ins(r->R, dd);
}
};
Count++;
return ins(root, d);
}
void Travel()
{
function<void(Node*&)> tra = [&](Node*& r)
{
if (r == NULL)
{
return;
}
tra(r->L);
cout << r->data << " ";
tra(r->R);
};
tra(root);
}
Node*& Find(T d)
{
function<Node*&(Node*&, T)> fid = [&](Node*& r, T dd)->Node*&
{
if (r == NULL)
{
return r;
}
else if (r->data == dd)
{
return r;
}
else if (r->data < dd)
{
return fid(r->R, dd);
}
else
{
return fid(r->L, dd);
}
};
return fid(root, d);
}
bool If_empty()
{
return root == NULL;
}
bool Remove(T d)
{
function<bool(Node*, T)> rem = [&](Node* r, T dd)
{
Node*& temp = Find(dd);
if (temp == NULL)
{
return false;
}
Node* p = temp;
if (temp->L)
{
//无论有没有右子树,都不用考虑
Node* pn = temp;
while (pn->R)
{
pn = pn->R;
}
pn->R = temp->L;
}
temp = temp->R;
delete p;
p = NULL;
return true;
};
return rem(root, d);
}
void updata(T d)
{
Insert(d);
}
void clear()
{
function<void(Node*&)> cls = [&](Node*& r)
{
if (r == NULL)
{
return;
}
cls(r->L);
cls(r->R);
delete r;
r = NULL;
};
cls(root);
}
int high()
{
function<int(Node*)> h = [&](Node* r)
{
if (r == NULL)
{
return 0;
}
int lh = h(r->L);
int rh = h(r->R);
return 1 + (lh > rh ? lh : rh);
};
return h(root);
}
};
int main()
{
tree<int> t;
cin.get();
return 0;
}
利用包装器以及lambda表达式实现二叉查找树
标签:
原文地址:http://blog.csdn.net/linukey/article/details/45280515
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!