数据结构树4-二叉搜索树2

二叉搜索树.h:
 

#ifndef _二叉查找树_H
#define _二叉查找树_H
#include<iostream>
#include<string>enum Boolean{ FALSE,TRUE};
template<class Type>
class Element
{
public:Type key;//方便添加更新数据
};
// 错误我的写法:template<class Type> BinaryTree;template<class Type> class BinaryTree;  //前置声明 template<class Type>
class BinaryNode
{friend class BinaryTree<Type>; 
public:Element<Type> data;BinaryNode* leftChild;BinaryNode* rightChild;void display(int i);};template<class Type> 
class BinaryTree
{
private:BinaryNode<Type> * root;
public:BinaryTree(BinaryNode<Type> *init = 0){root = init;}Boolean Insert(const Element<Type>& x);BinaryNode<Type>* Search(const Element<Type>& x);BinaryNode<Type>* Search(BinaryNode<Type>*,const Element<Type>&);BinaryNode<Type>* IterSearch(const Element<Type>&);//增加删除//增加遍历void display(){cout << "\n";if (root)root->display(1);elsecout << "这是一棵空树" << "\n";}}; //显示当前结点的数据及左子树右子树中的数据
template<class Type>
void BinaryNode<Type>::display(int i)
{std::cout << "Position:" << i << ",key:" << data.key << "\n";if (leftChild) leftChild->display(2 * i);if (rightChild) rightChild->display(2 * i + 1);
}//我写的
//template<class Type>
//Boolean BinaryTree<Type>::Insert(const Element<Type>& x)
//{
//	BinaryNode<Type> *p = root;
//	BinaryNode<Type> *q =0;    //q指向p的父结点
//	if (x == p->data.key) return;
//	while (p)
//	{
//		q = p;
//		if (x > p->rightChild->data.key)
//			p = p->rightChild;
//		else
//			p = p->leftChild;
//	}
//	BinaryNode<Type>* newNode = new BinaryNode<Type>;
//	newNode->data.key = x;
//	newNode->rightChild = 0;
//	newNode->leftChild = 0;
//	if (x > q->data.key)
//		q->rightChild = newNode;
//	else
//		q->leftChild = newNode;	
//}
template<class Type>
Boolean BinaryTree<Type>::Insert(const Element<Type> &x)
{BinaryNode<Type> *p = root;BinaryNode<Type> *q = 0;    //q指向p的父结点//insert前先查找while (p){q = p;if (x.key == p->data.key) return FALSE;  //发生重复,失败返回FALSEif (x.key > p->data.key)p = p->rightChild;else p = p->leftChild;}//找到的位置就是qBinaryNode<Type> *newNode = new BinaryNode<Type>;newNode->data = x;newNode->rightChild = newNode->leftChild = 0;if (!root) root = newNode;else if (x.key > q->data.key)q->rightChild = newNode;elseq->leftChild = newNode;return TRUE;
}//我写的
//template<class Type>
//BinaryNode<Type>* BinaryTree<Type>::IterSearch(const Element<Type>& x)
//{
//	BinaryNode<Type>* node,
//		node = root;
//	while (node)  用while错误???不知道为什么
//	{
//		if (node->data.key == x)
//			return node;
//		if (node->data.key > x)
//			node = node->rightChild;
//		else
//			node = node->leftChild;
//	}
//
//}
template<class Type>
BinaryNode<Type>* BinaryTree<Type>::IterSearch(const Element<Type>& x)
{for (BinaryNode<Type>* node = root; node;){if (x.key==node->data.key )return node;if (x.key>node->data.key)node = node->rightChild;elsenode = node->leftChild;}return 0;}//完全不会
template<class Type>
BinaryNode<Type>* BinaryTree<Type>::Search(const Element<Type>&x)  //查找某个数--》从root结点开始的树中的数
{return Search(root, x);
}
template<class Type>
BinaryNode<Type>* BinaryTree<Type>::Search(BinaryNode<Type>* node, const Element<Type>&x)
{if (!node)return 0;else if (x.key == node->data.key) return node;else if (x.key < node->data.key) return Search(node->leftChild, x); elsereturn Search(node->rightChild, x);
}#endif

test.h:

#include<iostream>
#include<string>
#include"二叉查找树.h"using namespace std;
int main()
{//我的错误写法 Element<Type> a;BinaryTree<int> m;Element<int> a,b,c,d,e,f,g,h,i,j,k,l;a.key = 5;b.key = 3;c.key = 11;d.key = 3;e.key = 15;f.key = 2;g.key = 8;h.key = 22;i.key = 20;j.key = 9;cout<<m.Insert(a)<<endl;cout<<m.Insert(b)<<endl;cout << m.Insert(c) << endl;cout << m.Insert(d) << endl;cout << m.Insert(e) << endl;cout << m.Insert(f) << endl;cout << m.Insert(g) << endl;cout << m.Insert(h) << endl;cout << m.Insert(i) << endl;cout << m.Insert(j) << endl;m.display();BinaryNode<int> *node=m.IterSearch(f);cout << "node->data.key:" << node->data.key << endl;BinaryNode<int> *node1 = m.Search(e);cout << "node1->data.key:" << node1->data.key << endl;return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【功能业务篇】APP授权微信登录、绑定账号测试思考

参考https://open.weixin.qq.com/cgi-bin/showdocument?actiondir_list&tresource/res_list&verify1&idopen1419317851&token&langzh_CN 准备工作 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登…

数据结构-树3-红黑树

1、刚开始建立的红黑树的红黑树只有一个指针&#xff08;实际为结点&#xff0c;它的右子树指向真正的根结点&#xff08;现在指向空结点&#xff09;。左子树为空结点&#xff0c;里面的数据为负无穷大&#xff09; 2、实现Insert函数

比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...

最早见到华为的HiCar&#xff0c;还是今年4月份的华为P40系列手机发布会。根据发布会公布的信息&#xff0c;HiCar主要的特点就是手机与汽车的顺畅连接体验。借由5G手机&#xff0c;汽车可以实现更强的数据传输能力&#xff0c;同时百万级别的手机APP也会扩展至汽车之上。在这次…

Python模拟实现multipart/form-data格式上传图片文件

一、单字段发送单个文件 url "http://httpbin.org/post" data None files { ... } r requests.post(url, data, filesfiles) 而这个files参数是可以接受很多种形式的数据&#xff0c;最基本的2种形式为字典类型和元祖列表类型 1、字典类型的files参数 { &q…

tensorflow9-mnist手写数字识别进阶-多层神经网络建模

大圆为一个神经元模型 全连接&#xff1a;相邻的两层之间所有的结点都会连接 神经网络的层数&#xff1a;一般指的谁隐藏层的数量 上图中的网络即为一层神经网络 以上即为两层的全连接神经网络 两层神经网络模型训练 神经网络的层次是不是越多越好&#xff1f;并不是越多越好…

BurpSuit配置抓包http和https请求

1、下载安装burpsuit https://portswigger.net/burp/communitydownload 双击一直点下一步&#xff0c;可安装成功 2、burpsuit设置 2、浏览器设置代理 设置-高级-打开代理设置-局域网设置 3、这样可以抓取http包了 4、Burp Suite要抓HTTPS的包&#xff0c;是需要有Burp Sui…

TensorFlow10-多层神经网络建模,存储和载入

整体流程&#xff1a; 只保存最近5个模型 playground.tensorflow.org TensorFlow浏览器训练网址

手机突然电量消耗很快_手机掉电突然变快?这5点操作你肯定至少做了其中一个!...

许多人都遇到过手机掉电突然变快的情况。以前充一次电&#xff0c;明明可以用一整天的&#xff0c;某天突然发现&#xff0c;满电的手机没打几局游戏或才看一会电视&#xff0c;电量就没了一大半&#xff0c;一天充好几次都不够用。每每遇到这种情况时&#xff0c;很多人都觉得…

Python史上最简单5行代码群发邮件Zmail模块

zmail简介 Zmail 允许你发送和接受邮件尽可能的简单。你不需要去检查你的服务器地址、端口以及自己构造MIME对象&#xff0c;使用Zmail&#xff0c;你只需要关注你的邮件内容即可。Zmail只在python3中运行&#xff0c;不需要第三方模块。不支持python2 Zmail的优势 自动填充…

TensorFlow11CNN和全卷积神经网络

应用&#xff1a;图像分类&#xff0c;物体识别&#xff0c;看图说话 卷积神经网络的基本结构

jmeter web监听结果_Jmeter性能测试

Jmeter性能测试&#xff0c;Jmeter简介1.1 概述JMeter&#xff0c;每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用LoadRunner了。Jmeter 是一款…

Appium+Python安卓自动化测试之启动APP和配置获取

AppiumPython安卓自动化测试之启动APP和配置获取 本文章未讲述appiumpython环境部署&#xff0c;环境部署会新开文章 一、手机连接电脑 1、USB连接电脑和手机&#xff0c;手机上点确认连接&#xff08;最好用原装线&#xff09; 2、开启手机开发者模式和USB调试&#xff08…

python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

大家好哇&#xff0c;又是一个愉快的周末&#xff0c;今天本鸟给大家分享1个有趣的实战项目&#xff0c;用python制作“全国身份证号验证及查询系统”&#xff0c;成品界面如下图&#xff1a; 本系统可以实现身份证号真伪验证&#xff0c;年龄、性别及发证地查询&#xff0c;看…

jop怎么读音英语怎么说_“跨年”英语怎么说?

2020年已经过去了31日晚上跨年夜&#xff0c;你在哪里跨年呢&#xff1f;今天的问题来了&#xff0c;你知道“跨年”用英语怎么说吗&#xff1f;一起学习一下吧。“跨年夜”英语怎么说&#xff1f;跨年夜的英语表达是&#xff1a;Spend New Years Eve / Celebrate New Years Ev…

吴恩达深度学习笔记——卷积神经网络(CNN)

目录 一、计算机视觉&#xff08;Computer vision&#xff09; 二、边缘检测示例&#xff08;Edge detection example&#xff09; 三、更多的边缘检测内容&#xff08;More edge detection&#xff09; 四、Padding 五、卷积步长&#xff08;Strided convolution&#xff…

react实现全选和反选_全选的实现

在很多的表单中我们都会看到有一个这样的功能&#xff0c;全选后进行一系列的操作。如操作前操作后简单的js实现首先要定义多选框&#xff0c;在表头可以使用id来定义同时添加onclick点击事件<input type"checkbox" id"all" onclick"checkAllCart(…

对tf.nn.softmax的理解

Softmax的含义&#xff1a;Softmax简单的说就是把一个N*1的向量归一化为&#xff08;0&#xff0c;1&#xff09;之间的值&#xff0c;由于其中采用指数运算&#xff0c;使得向量中数值较大的量特征更加明显。 如图所示&#xff0c;在等号左边部分就是全连接层做的事。 W是全连…

面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“罗波”。不知道大家在面试的过程中&#xff0c;有没有遇到过一些考官出了非常奇葩或者让你难以回答的题目。曾经在一次人事招聘的面试环节中&#xff0c;我的朋友小何就遇到了这样的一个问题&#xff0c;当时领导问…

心动的本质是什么_那一刻,我怦然心动了......

见到布莱斯罗斯基的第一天&#xff0c;我心动了。他的双眸有种魔力让我如痴如醉。女孩对一个刚见面的男孩一见钟情&#xff0c;男孩成了她的邻居&#xff0c;而她管这种感觉叫&#xff1a;怦然心动。2010年《怦然心动》上映&#xff0c;导演罗伯莱纳用一棵树&#xff0c;一对小…