#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-二叉搜索树相关推荐

  1. 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

    在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...

  2. (一)BST树(二叉搜索树)

    (一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树 ...

  3. 树形结构:二叉排列树,二叉搜索树

    二叉排列树,二叉搜索树 这个数听见得比较多,含义是:左边<=中间<=右边,换句话来说使用中序遍历最后得到结果就是一个有序得序列. 建立一颗二叉排列树 class BinTNode:def ...

  4. 数据结构与算法:二叉搜索树

    ✨数据结构与算法:二叉搜索树

  5. 数据结构--伸展树(伸展树构建二叉搜索树)-学习笔记

    2019/7/16更新:封装SplayTree进入class:例题:http://poj.org/problem?id=3622 一个伸展树的板子: #include<stdio.h> # ...

  6. 数据结构 --- c语言二叉搜索树(有序的树)

    二叉搜索树基础 左边的孩子节点 < 父节点的值,右边孩子节点 > 父节点的值 每棵二叉搜索树的子树也是一棵二叉搜索树 10 充当根节点 18 > 根节点,应该放在根节点的右边:3 & ...

  7. 算法 树7 二叉搜索树的操作集

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...

  8. 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)

    1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...

  9. 【数据结构】二叉查找树/二叉搜索树BST(附相关C++代码)

    文章目录 BST相关概念 BST如何添加节点 BST如何遍历 BST如何求最值 BST如何删除节点 BST如何查找节点 如何验证一棵树是BST 本文内容将主要介绍二叉查找树的相关概念,与关于二叉查找树 ...

  10. 高级数据结构与算法 | 二叉搜索树(Binary Search Tree)

    文章目录 二叉搜索树的概念 二叉搜索树的作用 排序 查找 实现思路 查找 插入 删除 删除.拷贝等 代码实现 K模型 KV模型 二叉搜索树的概念 二叉搜索树又叫做二叉排序树,他是一个具有以下特性的二叉 ...

最新文章

  1. Dataset之Rotten Tomatoes:Rotten Tomatoes影评数据集简介、下载、使用方法之详细攻略
  2. python缓存技术_Python中整数的缓存机制讲解
  3. 确保企业的大数据投资达到预期的5种方法
  4. dask 使用_在Google Cloud上使用Dask进行可扩展的机器学习
  5. 浅谈java spring_浅谈Spring(一)
  6. Laravel Cache 的缓存文件在到期后是否会自动删除
  7. datatable更新到mysql_.NET_使用DataTable更新数据库(增,删,改),1、修改数据复制代码 代码如 - phpStudy...
  8. (免费领取名企Java面试题)volatile作用,指令重排相关
  9. 塔防游戏策划方案unity
  10. VScode设置为中文版
  11. Python爬虫之40行代码爬取金庸所有武侠小说
  12. 计算机三级网络技术考过指南 【历年考点汇总】
  13. 切换进程 切换线程
  14. 【计算机硬件组成】基础知识(必备)
  15. 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)
  16. java类和对象在内存的表现形式
  17. 无锡室内设计培训:室内设计的程序是怎样的?
  18. 检测两点所确定直线上的像素坐标
  19. 3D地形编程——之GeoMipMap基础
  20. Microsoft Visual C++Build Tools安装包丢失或损坏【解决方案】

热门文章

  1. @ControllerAdvice实现优雅地处理异常
  2. 单链表插入元素 注释 c语言,数据结构之无头单链表的相关练习题——C语言实现(详细注释)...
  3. 计算机管理档案有什么好处,利用资料管理系统管理档案有什么好处
  4. 数控车椭圆编程实例带图_数控车床编程教程,图文实例详解
  5. linux指令能回滚么,如何在Ubuntu上撤消或回滚“ apt-get upgrade”命令?
  6. c语言数组最大可定义多少位_C语言求数组的最大值三种方法
  7. 哈希表的大小为何最好是素数
  8. Jackson快速入门
  9. JavaCard概述
  10. 解决神经网络过拟合问题—Dropout方法、python实现