数据结构-树5-二叉搜索树
#include<iostream>
#include<string>using namespace std;
//构建二叉树的结构体
template< typename T>
struct binaryTreeNode
{T element; //数据binaryTreeNode<T>* leftChild; //左子树指针binaryTreeNode<T>* rightChild; //右子树指针//C C++ 区别//无参数构造函数-->用来给数据初始化binaryTreeNode(){leftChild = rightChild = NULL;}//传入数据域//C++初始化参数列表(const数据域必须采用这种方式)binaryTreeNode(const T& element) :element(element){leftChild = rightChild = NULL;}//C++类中const成员: const数据成员 const成员函数binaryTreeNode(const T& element, binaryTreeNode<T> * leftChild, binaryTreeNode<T>* rightChild) :element(element){//c++ thisthis->leftChild = leftChild;this->rightChild = rightChild;}};template< typename K, typename E>
class binarySearchTree {
public:binarySearchTree();//万金油函数:判断是否为空+size大小+打印数据int size() const; //const 成员函数里面不能修改基本数据成员bool empty() const;void printNode(binaryTreeNode<pair<const K, E>>* Node);void visit(binaryTreeNode<pair<const K, E>>* Node){cout << Node->element.first << ":" << Node->element.second << endl;}void printTree();//插入结点:插入的pair类型的结构体数据void insert(const pair<const K, E> &thePair);//删除结点:根据关键字删除//void erase(const K& theKey);//查找结点//pair<const &K, E>* find(const K& theKey);
protected: //pair<const K,E> 模板结构体名binaryTreeNode<pair<const K, E>>* root;//根结点表示整个数int treeSize; //记录结点数
};template< typename K, typename E>
int binarySearchTree<K,E>::size() const
{return treeSize;
}template< typename K, typename E>
bool binarySearchTree <K,E>::empty() const
{return treeSize == 0;
}template< typename K, typename E>
binarySearchTree <K, E>::binarySearchTree()
{root = NULL;treeSize = 0;
}template<typename K, typename E>
void binarySearchTree<K, E>::printNode(binaryTreeNode<pair<const K, E>>* Node)
{if (Node != NULL){printNode(Node->leftChild);visit(Node);printNode(Node->rightChild);}
}
template<typename K, typename E>
void binarySearchTree<K, E>::printTree()
{printNode(root);
}template<typename K,typename E>
void binarySearchTree <K, E>::insert(const pair<const K, E> & thePair)
{//找到合适的位置插入binaryTreeNode<pair<const K, E>> *p = root;binaryTreeNode<pair<const K, E>> *pp = NULL;while (p != NULL){pp = p; //记录父结点if (thePair.first < p->element.first){p = p->leftChild;}else if (thePair.first > p->element.first){p = p->rightChild;}else { //表示键存在p->element.second = thePair.second;return;}}binaryTreeNode<pair<const K, E>>* newNode = new binaryTreeNode<pair<const K, E>>(thePair);if (root != NULL){if (thePair.first < pp->element.first){pp->leftChild = newNode;}else pp->rightChild = newNode;}else{root = newNode;}treeSize++;
}int main()
{binarySearchTree<int, string> myBST;myBST.insert(pair<int, string>(8, "美丽世界"));myBST.insert(pair<int, string>(9, "343434"));myBST.insert(pair<int, string>(5, "Joken"));myBST.insert(pair<int, string>(1, "VICO"));myBST.insert(pair<int, string>(6, "widget"));myBST.insert(pair<int, string>(2, "nana"));myBST.printTree();system("pause");return 0;
}
运行结果:
数据结构-树5-二叉搜索树相关推荐
- 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...
- (一)BST树(二叉搜索树)
(一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树 ...
- 树形结构:二叉排列树,二叉搜索树
二叉排列树,二叉搜索树 这个数听见得比较多,含义是:左边<=中间<=右边,换句话来说使用中序遍历最后得到结果就是一个有序得序列. 建立一颗二叉排列树 class BinTNode:def ...
- 数据结构与算法:二叉搜索树
✨数据结构与算法:二叉搜索树
- 数据结构--伸展树(伸展树构建二叉搜索树)-学习笔记
2019/7/16更新:封装SplayTree进入class:例题:http://poj.org/problem?id=3622 一个伸展树的板子: #include<stdio.h> # ...
- 数据结构 --- c语言二叉搜索树(有序的树)
二叉搜索树基础 左边的孩子节点 < 父节点的值,右边孩子节点 > 父节点的值 每棵二叉搜索树的子树也是一棵二叉搜索树 10 充当根节点 18 > 根节点,应该放在根节点的右边:3 & ...
- 算法 树7 二叉搜索树的操作集
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...
- 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)
1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...
- 【数据结构】二叉查找树/二叉搜索树BST(附相关C++代码)
文章目录 BST相关概念 BST如何添加节点 BST如何遍历 BST如何求最值 BST如何删除节点 BST如何查找节点 如何验证一棵树是BST 本文内容将主要介绍二叉查找树的相关概念,与关于二叉查找树 ...
- 高级数据结构与算法 | 二叉搜索树(Binary Search Tree)
文章目录 二叉搜索树的概念 二叉搜索树的作用 排序 查找 实现思路 查找 插入 删除 删除.拷贝等 代码实现 K模型 KV模型 二叉搜索树的概念 二叉搜索树又叫做二叉排序树,他是一个具有以下特性的二叉 ...
最新文章
- Dataset之Rotten Tomatoes:Rotten Tomatoes影评数据集简介、下载、使用方法之详细攻略
- python缓存技术_Python中整数的缓存机制讲解
- 确保企业的大数据投资达到预期的5种方法
- dask 使用_在Google Cloud上使用Dask进行可扩展的机器学习
- 浅谈java spring_浅谈Spring(一)
- Laravel Cache 的缓存文件在到期后是否会自动删除
- datatable更新到mysql_.NET_使用DataTable更新数据库(增,删,改),1、修改数据复制代码 代码如 - phpStudy...
- (免费领取名企Java面试题)volatile作用,指令重排相关
- 塔防游戏策划方案unity
- VScode设置为中文版
- Python爬虫之40行代码爬取金庸所有武侠小说
- 计算机三级网络技术考过指南 【历年考点汇总】
- 切换进程 切换线程
- 【计算机硬件组成】基础知识(必备)
- 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)
- java类和对象在内存的表现形式
- 无锡室内设计培训:室内设计的程序是怎样的?
- 检测两点所确定直线上的像素坐标
- 3D地形编程——之GeoMipMap基础
- Microsoft Visual C++Build Tools安装包丢失或损坏【解决方案】
热门文章
- @ControllerAdvice实现优雅地处理异常
- 单链表插入元素 注释 c语言,数据结构之无头单链表的相关练习题——C语言实现(详细注释)...
- 计算机管理档案有什么好处,利用资料管理系统管理档案有什么好处
- 数控车椭圆编程实例带图_数控车床编程教程,图文实例详解
- linux指令能回滚么,如何在Ubuntu上撤消或回滚“ apt-get upgrade”命令?
- c语言数组最大可定义多少位_C语言求数组的最大值三种方法
- 哈希表的大小为何最好是素数
- Jackson快速入门
- JavaCard概述
- 解决神经网络过拟合问题—Dropout方法、python实现