linux下练习 c++ 有序二叉树

#include <iostream>
using namespace std;
typedef int T;
class bst//有序的二叉查找树
{
	struct Node
	{
		T data;
		Node * L;
		Node * R;
		Node(const T&d):data(d),L(),R(){}//将L或R初始化为0
		Node(const T&d,Node * l,Node * r):data(d),L(l),R(r){}
	};
	typedef Node* tree;
	Node * root;//根结点
	int n;//记录节点个数
public:
	bst():root(),n(){}
	void insert(tree& t,Node* p)//插入数据
	{
		if(t==NULL) t=p;
		else if(p->data<t->data) insert(t->L,p);
		else insert(t->R,p);
	}
	void insert(const T& d)
	{
		insert(root,new Node(d));
		++n;
	}
	tree& find(tree& t,const T& d)//查找,&代表指针本身
	{
		if(t==NULL) return t;//返回tree类型的
		else if(d==t->data) return t;
		else if(d<t->data) return find(t->L,d);
		else return find(t->R,d);
	}
	tree& find(const T& d)
	{
		return find(root,d);
	}
	void travel(tree t) const//遍历
	{
		if(t!=NULL)
		{
			travel(t->L);
			cout<<t->data<<" ";
			travel(t->R);
		}
	}
	void travel()
	{
		travel(root);
		cout<<endl;
	}
	bool empty()const//是否为空
	{
		return root==NULL;
	}
	bool remove(const T& d)//删除数据节点
	{
		tree& t=find(d);//引用,原来的地址
		if(t==NULL) return false;
		Node* p=t;
		if(t->L !=NULL) insert(t->R,t->L);//左子树插入到右子树中去
		t=t->R;//t指向右子树
		delete p;//删除结点空间
		--n;
		return true;
	}
	int size()const {return n;}
	void update(const T& olddata,const T& newdata)//修改数据
	{
		if(remove(olddata)) insert(newdata);//删除旧的,插入新的
	}
	const T& rdata()const
	{
		if(!root) throw "空";
		return root->data;
	}
	void clear(tree& t)//清空,释放内存
	{
		if(t!=NULL)
		{
			clear(t->L);
			clear(t->R);
			delete t;
			t=NULL;
			cout<<"内存释放完成!\n";
			n=0;
		}
	}
	void clear()
	{
		clear(root);
	}
	int height(tree t)//高度
	{
		if(t==NULL) return 0;
		int lh=height(t->L);
		int rh=height(t->R);
		return 1+(lh>rh?lh:rh);
	}
	int height()
	{
		return height(root);
	}
};

int main()
{
	bst b;
	b.insert(4);//插入
	b.insert(5);
	b.insert(-23);
	b.insert(24);
	b.insert(77);
	b.insert(20);
	b.update(20,28);//20修改为28
	b.remove(4);//删除4的节点
	b.travel();//遍历一下
	cout<<b.rdata()<<endl;
	return 0;
}

g++ -o tree.out tree.cpp

./tree.out

 

时间: 2024-11-05 20:27:12

linux下练习 c++ 有序二叉树的相关文章

Linux下文本的高效处理

1 引言 所谓的文本处理是指对文本进行查找.替换.删除.排序等操作, linux在文本处理方面提供了大量优秀的工具, 使得在linux下进行文本处理极其的方便.  我们平常的工作中, 经常会用到文本处理, 比如日志分析, 比如文本抽取, 等等, 所以掌握好文本处理, 将会对我们的工作起到极大的作用.  下面我就来逐个介绍下这些强大的工具, 对于我觉得大家可能比较熟知的工具及用法, 我会略过, 或者粗讲下. 2 关于输入 Linux哲学中, 为了更好的组合各种命令达到更加强大的功能, 大多数文本处

Linux下安装Redis并设置相关服务_Redis

一.简介 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器. Redis 优势          异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录.          支持丰富的数据类型:Redi

《Linux指令从入门到精通》——4.4 Linux下的文本编辑指令

4.4 Linux下的文本编辑指令 4.4.1 col指令:过滤控制字符学会滤除控制字符 col [-可选参数] col指令过滤控制字符,可以将文件的内容转换为纯文本模式,可处理man指令的输出数据.同时col指令还能使用多个空格代替tab,能用于转存nroff和tbl的输出. 可选参数及其说明如下: 范例425 过滤控制字符,并保存为文本文件. [root@localhost yy]# man cat > h.txt [root@localhost yy]# cat h.txt CAT(1)

Linux下备份恢复技术的应用

  本文讲述Linux环境下,如何使用备份的脚本和命令以及商业化的软件来合理高效地保护磁盘数据安全. 备份与恢复系统承担着事前备份与事后恢复的职能.在当前高速发展的网络环境下,任何一个网络上的信息 系统都不可能保证绝对的安全.只要有网络存在,就会有来自网络的形形色色的威胁.为了抵御网络的攻击和入侵,虽然我们引入了日趋成熟的入侵检测系统.防火墙系统等,黑客们的入侵手段也日益高明,他们总能找到这些系统的安全漏洞及不足进行入侵,因而网络入侵所引起的安全事件呈逐年增加之势. 在这种情况下,我们难以保证网

openni opencv linux-如何在linux下建立一个着openni和opencv的工程?

问题描述 如何在linux下建立一个着openni和opencv的工程? 如何在linux下建立一个着openni和opencv的工程?麻烦大神们详细解说下,不胜感激!!!!

关于linux下的嵌入式文件系统以及flash文件系统选择

嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件系 统,使用系统的RAM空间• JFFS/JFFS2:为Flash设计的日志文件系统 • Yaffs:专门为Nand Flash设计 • proc:为内核和内核模块将信息发送给进程提 供一种机制,可以查看系统模块装载的信息 • devFS:设备文件系统 Linux上的Ext2fs • 支持4 TB

脚本-如何在Linux下批量改C语言的作业?

问题描述 如何在Linux下批量改C语言的作业? 最近接到导师给的一个任务帮本科生改C语言作业.大概的界面是这样的需要测试每种输入: LuYang:CISB110-Programming Practice 1-41826 luyang$ ./mainChoose the type of speed conversion:1. knots to km/h2. km/h to knotsEnter your choice (1 or 2): 0Invalid optionLuYang:CISB110

linux下oracle自动备份脚本

linux下oracle自动备份脚本  vi /home/oracle/backup.sh   //编写脚本 以下为脚本内容 time=` date +"%Y%m%d%H%M" ` //变量time 获取当前系统时间 su - oracle -c "exp hbskjt_0113/password owner=hbskjt_0113 file=/home/oracle/hbskjt_$time.dmp"  //导库脚本 cd /home/oracle tar zcv

Linux下LCD 10分钟自动关屏的问题总结

Linux下的LCD驱动默认10分钟后会自动关闭屏幕,我们可以修改一下代码让其不自动关屏 在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它来修改自动关屏的时间,也可以在函数(blank_screen_t)开头直接返回,这样就永远不会关屏了   在用LCD显示的时候,发现10分钟LCD就不再工作了.确实,Linux下有一个参数blankinterval的值就是10*60*Hz. 它决定了LCD只显示10分钟,然后LCD控制器就被关掉了. 具体