当前位置: 首页 > news >正文

淄博做网站的公司都有哪些广告营销推广

淄博做网站的公司都有哪些,广告营销推广,百度网站架构,如何免费引流推广1、二叉搜索树的概念 二叉搜索树又叫做二叉排序树,他或者是一棵空树,或者具有以下性质: 若他的左子树不为空,则左子树的所有节点的值都小于根节点的值, 若他的右子树不为空,则右子树的所有节点的值都大于…

1、二叉搜索树的概念

二叉搜索树又叫做二叉排序树,他或者是一棵空树,或者具有以下性质:

若他的左子树不为空,则左子树的所有节点的值都小于根节点的值,

若他的右子树不为空,则右子树的所有节点的值都大于根节点的值,

他的左右子树也分别为二叉搜索树;

2、二叉搜索树的操作

  int a[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};

1.二叉搜索树的查找

从根节点开始找,比根大往右边查找,比根小往左边查找,最多查找高度次,走到空还没找到,则该值不存在;

2.二叉搜索树的插入

若树为空,则新增节点,赋值给root指针,

若树不为空,按二叉搜索树查找插入位置,插入新节点

 3.二叉搜索树的删除

首先查找元素是否在二叉搜索树中,如果不存在,则返回,如果存在,则分为以下四种情况:

a. 要删除的结点无孩子结点
b. 要删除的结点只有左孩子结点
c. 要删除的结点只有右孩子结点
d. 要删除的结点有左、右孩子结点
其实a情况可以和b c 情况合并起来,这样我们只需要考虑三种删除方式:
情况b: 删除该节点,并使该节点的父亲节点指向删除节点的左节点
情况c:删除该节点,并使该节点的父亲节点指向删除节点的右节点
情况d:替换法,找到该节点右子树的最小节点或者左子树的最大节点,与该节点替换,然后删除右子树的最小节点或左子树的最大节点;

4.二叉搜索树的实现

#pragma once#include<iostream>
#include<string>
using namespace std;
namespace key
{template<class K>struct BSTreeNode{BSTreeNode<K>* _left;BSTreeNode<K>* _right;K _key;BSTreeNode(const K& key):_left(nullptr),_right(nullptr),_key(key){ }};template<class K>class BSTree{typedef BSTreeNode<K> Node;public:bool Insert(const K& key){if (_root == nullptr){_root = new Node(key);return true;}Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{return false;}}cur = new Node(key);if (parent->_key < key){parent->_right = cur;}else{parent->_left = cur;}return true;}bool Find(const K& key){Node* cur = _root;while (cur){if (cur->_key < key){cur = cur->_right;}else if(cur->_key>key){cur = cur->_left;}else{cout << "true" << endl;return true;}}cout << "false" << endl;return false;}bool Erase(const K& key){Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{//删除//左为空,父亲指向我的右if (cur->_left == nullptr){if (cur == _root){_root = cur->_right;}else{if (parent->_left == cur){parent->_left = cur->_right;}else{parent->_right=cur->_right;}}delete cur;}//右为空,父亲指向我的左else if (cur->_right == nullptr){if (cur == _root){_root = cur->_left;}else{if (parent->_left == cur){parent->_left = cur->_left;}else{parent->_right = cur->_left;}}delete cur;}else{//左右都不为空,替换法//查找右子树的最小节点或左子树的最大节点//我们这里找右子树的最小节点(也就是最左节点)Node* rightMinParent = cur;Node* rightMin = cur->_right;while (rightMin->_left){rightMinParent = rightMin;rightMin = rightMin->_left;}swap(cur->_key, rightMin->_key);if (rightMinParent->_left == rightMin){rightMinParent->_left = rightMin->_right;}else{rightMinParent->_right = rightMin->_right;}delete rightMin;}return true;}}return false;}void InOrder(){_InOrder(_root);cout << endl;}private:void _InOrder(Node* root){if (root == nullptr){return;}_InOrder(root->_left);cout << root->_key << " ";_InOrder(root->_right);}Node* _root = nullptr;};void TestBSTree1(){BSTree<int> b;b.Insert(1);b.Insert(2);b.Insert(3);b.Insert(4);b.Insert(5);b.Find(6);b.Find(3);b.Find(5);b.InOrder();}void TestBSTree2(){int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };BSTree<int> t1;for (auto e : a){t1.Insert(e);}/*t1.InOrder();t1.Erase(8);t1.InOrder();*/for (auto e : a){t1.Erase(e);t1.InOrder();}}
}namespace key_value
{template<class K,class V>struct BSTreeNode{BSTreeNode<K,V>* _left;BSTreeNode<K,V>* _right;K _key;V _value;BSTreeNode(const K& key,const V& value):_left(nullptr), _right(nullptr), _key(key), _value(value){ }};template<class K,class V>class BSTree{typedef BSTreeNode<K,V> Node;public:bool Insert(const K& key, const V& value){if (_root == nullptr){_root = new Node(key,value);return true;}Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{return false;}}cur = new Node(key,value);if (parent->_key < key){parent->_right = cur;}else{parent->_left = cur;}return true;}Node* Find(const K& key){Node* cur = _root;while (cur){if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{return cur;}}return cur;}bool Erase(const K& key){Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{//删除//左为空,父亲指向我的右if (cur->_left == nullptr){if (cur == _root){_root = cur->_right;}else{if (parent->_left == cur){parent->_left = cur->_right;}else{parent->_right = cur->_right;}}delete cur;}//右为空,父亲指向我的左else if (cur->_right == nullptr){if (cur == _root){_root = cur->_left;}else{if (parent->_left == cur){parent->_left = cur->_left;}else{parent->_right = cur->_left;}}delete cur;}else{//左右都不为空,替换法//查找右子树的最小节点或左子树的最大节点//我们这里找右子树的最小节点(也就是最左节点)Node* rightMinParent = cur;Node* rightMin = cur->_right;while (rightMin->_left){rightMinParent = rightMin;rightMin = rightMin->_left;}swap(cur->_key, rightMin->_key);if (rightMinParent->_left == rightMin){rightMinParent->_left = rightMin->_right;}else{rightMinParent->_right = rightMin->_right;}delete rightMin;}return true;}}return false;}void InOrder(){_InOrder(_root);cout << endl;}private:void _InOrder(Node* root){if (root == nullptr){return;}_InOrder(root->_left);cout << root->_key << ":" << root->_value << " ";_InOrder(root->_right);}Node* _root = nullptr;};void TestBSTree3(){BSTree<string, string> dict;dict.Insert("string", "字符串");dict.Insert("left", "左边");dict.Insert("insert", "插入");string str;while (cin >> str){BSTreeNode<string, string>* ret = dict.Find(str);if (ret){cout << ret->_value << endl;}else{cout << "无此单词,请重新输入" << endl;}}}void TestBSTree4(){// 统计次数string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜","苹果", "香蕉", "苹果", "香蕉","苹果","草莓", "苹果","草莓" };BSTree<string, int> countTree;for (const auto& str : arr){auto ret = countTree.Find(str);if (ret == nullptr){countTree.Insert(str, 1);}else{ret->_value++;}}countTree.InOrder();}}

5、二叉搜索树的应用

1.K模型:K模型只有key作为关键码,结构中只需要存储key即可,关键码即为需要搜索到的值;

比如:给一个单词word,判断该单词是否拼写正确,

2.K-V模型:每一个关键码都对应一个Value,即<Key,value>的键值对,

比如:英汉字典中用英文与中文的对应关系,通过英文可以快速找到对应的中文,

6、二叉搜索树的性能分析

对于有n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是高度次,但对于同一个关键码集合,如果插入的次序不同,可能得到不同结构的二叉树:

 

最优情况下,二叉搜索树为完全二叉树(或者接近完全二叉树),其平均比较次数为:O(logN)
最差情况下,二叉搜索树退化为单支树(或者类似单支),其平均比较次数为O(N);

 

http://www.zhongyajixie.com/news/4126.html

相关文章:

  • 保山市住房和城上建设局网站什么平台可以免费推广产品
  • 网站制作公司在哪里找seo技术软件
  • 国外科技类网站网络营销核心要素
  • php网站做ios快速排名优化系统
  • 网站后台界面设计百度快速排名软件原理
  • 重庆梁平网站建设哪家便宜百度关键词排名qq
  • 如何做网站推广 求指点江苏网站建站系统哪家好
  • wordpress 4.7.3 idseo站长
  • 深圳网站建设制作设计公司app制作一个需要多少钱
  • 网站开发 源码网站优化排名易下拉排名
  • 网站正在建设模板网络推广员压力大吗
  • php网站源码建设教程神马快速排名优化工具
  • 网站软件定制开发制作营销网络是什么
  • 介绍好看的电影网站模板免费下载优化的概念
  • 百度网做网站吗宁波seo在线优化方案公司
  • 好看的网页设计代码青岛网站建设优化
  • 中远建设集团有限公司网站推广资源整合平台
  • 广州网站建设多少钱网站关键词优化排名技巧
  • 汽修网站建设免费网络整合营销推广
  • 网站推广方法有哪几种酒店推广渠道有哪些
  • linux做网站教程代运营网店公司
  • c 做网站后端网站在线优化工具
  • 网站哪家公司做的网络广告营销案例
  • 艺创短信群发平台软件一键优化下载安装
  • 贵州省建设项目验收备案网站seddog站长之家
  • 湖南省建设厅安许审核公布网站百度推广客户端官方下载
  • 郴州疫情最新消息今天封城了全国分站seo
  • dedecms 获取网站地址站长推荐
  • 北京网站制作17页网络广告策划案例
  • 池州市网站建设免费的网页制作软件