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

网站没备案seo运营

网站没备案,seo运营,建设部网站在哪里报名考试,公司请做网站目录 概念 性能分析 二叉搜索树的插入 二叉树的查找 二叉树的前序遍历 二叉搜索树的删除(重点) 完整代码 key与value的使用 概念 对于一个二叉搜索树 若它的左子树不为空,则左子树上所有的节点的值都小于等于根节点的值若它的右子树不为空…

目录

概念

 性能分析

 二叉搜索树的插入

二叉树的查找

二叉树的前序遍历

二叉搜索树的删除(重点)

 完整代码

 key与value的使用


概念

        对于一个二叉搜索树

  • 若它的左子树不为空,则左子树上所有的节点的值都小于等于根节点的值
  • 若它的右子树不为空,则右字数上所有的节点的值都大于等于根节点的值
  • 它的左右子树也分别为二叉搜索树
  • 二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景 
template<class K,class V>
struct BSTreeNode
{typedef BSTreeNode<K, V> Node;BSTreeNode(const K& key,const V& val):_key(key),_value(val){}K _key;V _value;Node* _left = nullptr;Node* _right = nullptr;
};

 性能分析

指出二叉搜索树:

  • 最优情况下,二叉搜索树近似为完全二叉树,高度为\log_{2} N
  • 最差情况下,二叉搜索树退化为类似于单支树,高度为N
  • 最优情况下增删查改为O\left ( log_{2}N\right )
  • 最差情况下增删查改为O\left ( {N} \right )
  • 综合来讲时间复杂度为O\left ( N \right )

指出二分查找:

  • 二分查找需要在允许下标随机访问的结构中
  • 二分查找需要在有序的结构中
  • 二分查找的时间复杂度为O\left ( log_{2}N \right )
  • 二分查找对应的结构一般为数组,它挪动数据的时间复杂

 二叉搜索树的插入

  • 树为空,直接增新节点,赋值给root指针
  • 树不为空,按照性质,插入值比当前节点大走右边,反之走左边,插入空位置
  • 如果支持插入相等的值可以插左边或者右边(但是插左边就都插左边,反之相同)

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

bool Insert(const K& key, const V& value)
{if (_root == nullptr){_root = new Node(key, value);return true;}else{bool right = true;Node* p = _root;Node* c = _root;while (c != nullptr){p = c;if (key > c->_key){right = true;c = p->_right;}else if(key < c->_key){right = false;c = p->_left;}else{return false;}}c = new Node(key, value);if (right){p->_right = c;}else{p->_left = c;}return true;}
}

二叉树的查找

  •  从根开始查找,key比节点大就走右,比节点小就走左边
  • 最多查找高度次数,走到空还没找到就不存在
  • 不支持插入相等的值,找到x就返回,反之继续查找直到高度次
	Node* Find(const K& key,Node** p = nullptr){	Node* ptr = _root;while (ptr){if (key > ptr->_key){if (p)*p = ptr;ptr = ptr->_right;}else if (key < ptr->_key){if (p)*p = ptr;ptr = ptr->_left;}elsereturn ptr;}return ptr;}

二叉树的前序遍历

  • 采用递归
  • 打印左边节点
  • 打印中间节点
  • 打印右边节点
	void _InOrder(Node* root) {if (root == nullptr) return;_InOrder(root->_left);cout << root->_key << '{' << root->_value << '}' << ' ';_InOrder(root->_right);}

二叉搜索树的删除(重点)

  • 先查找是否存在,不存在返回false
  • 若存在有以下四种情况
    • 删除节点的左右孩子均为空
      • 直接删除然后给空
    • 删除节点的左(右)孩子为空,另一边不为空
      • 把节点的父亲对应的孩子节点的指针指向孩子不为空的一边,然后删除节点
    • 删除节点左右均不为空
      • 找左子树的最大节点(右子树的最小节点)替代删除节点,,然后删除最值节点
bool Erase(const K& key)
{Node* par = _root;Node* ptr = Find(key,&par);if (!ptr)return false;if (ptr == par){delete ptr;_root = nullptr;return true;}if(!ptr->_left&&!ptr->_right){if(par->_left == ptr)par->_left = nullptr;if(par->_right == ptr)par->_right = nullptr;delete ptr;return true;}else if (!ptr->_left && ptr->_right)//左空右不空{if (par->_left == ptr){par->_left = ptr->_right;}if (par->_right == ptr){par->_right = ptr->_right;}delete ptr;return true;}else if(ptr->_left && !ptr->_right){if (par->_left == ptr){par->_left = ptr->_left;}if (par->_right == ptr){par->_right = ptr->_left;}delete ptr;return true;}else//两边均不为空直接替换操作{//找左侧最大节点Node* Max = ptr->_left;Node* Maxp = ptr;while (Max->_right != nullptr){Maxp = Max;Max = Max->_right;}//交换ptr->_key = Max->_key;ptr->_value = Max->_value;//删除MAX的位置if (Maxp == ptr){ptr->_left = Max->_left;}else if (Max->_left){Maxp->_right = Max->_left;}else{Maxp->_right = Max->_right;}//删除Maxdelete Max;return true;}return false;
}

 完整代码

#pragma once
#include<iostream>
#include<string>
using namespace std;template<class K,class V>
struct BSTreeNode
{
public:typedef BSTreeNode<K, V> Node;BSTreeNode(const K& key,const V& val):_key(key),_value(val){}K _key;V _value;Node* _left = nullptr;Node* _right = nullptr;
};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;}else {bool right = true;Node* p = _root;Node* c = _root;while (c != nullptr) {p = c;if (key > c->_key) {right = true;c = p->_right;}else if (key < c->_key){right = false;c = p->_left;}else{return false;}}c = new Node(key, value);if (right){p->_right = c;}else{p->_left = c;}return true;}}Node* Find(const K& key,Node** p = nullptr){	Node* ptr = _root;while (ptr){if (key > ptr->_key){if (p)*p = ptr;ptr = ptr->_right;}else if (key < ptr->_key){if (p)*p = ptr;ptr = ptr->_left;}elsereturn ptr;}return ptr;}bool Erase(const K& key){Node* par = _root;Node* ptr = Find(key,&par);if (!ptr)return false;if (ptr == par){delete ptr;_root = nullptr;return true;}if(!ptr->_left&&!ptr->_right){if(par->_left == ptr)par->_left = nullptr;if(par->_right == ptr)par->_right = nullptr;delete ptr;return true;}else if (!ptr->_left && ptr->_right)//左空右不空{if (par->_left == ptr){par->_left = ptr->_right;}if (par->_right == ptr){par->_right = ptr->_right;}delete ptr;return true;}else if(ptr->_left && !ptr->_right){if (par->_left == ptr){par->_left = ptr->_left;}if (par->_right == ptr){par->_right = ptr->_left;}delete ptr;return true;}else//两边均不为空直接替换操作{//找左侧最大节点Node* Max = ptr->_left;Node* Maxp = ptr;while (Max->_right != nullptr){Maxp = Max;Max = Max->_right;}//交换ptr->_key = Max->_key;ptr->_value = Max->_value;//删除MAX的位置if (Maxp == ptr){ptr->_left = Max->_left;}else if (Max->_left){Maxp->_right = Max->_left;}else{Maxp->_right = Max->_right;}//删除Maxdelete Max;return true;}return false;}void InOrder(){_InOrder(_root);}
private:void _InOrder(Node* root) {if (root == nullptr) return;_InOrder(root->_left);cout << root->_key << '{' << root->_value << '}' << ' ';_InOrder(root->_right);}Node* _root = nullptr;
};

 key与value的使用

void TestBSTree()
{BSTree<string, string> dict;dict.Insert("insert", "插入");dict.Insert("erase", "删除");dict.Insert("left", "左边");dict.Insert("string", "字符串");string str;while (cin >> str){auto ret = dict.Find(str);if (ret){cout << str << ":" << ret->_value << endl;}else{cout << "单词拼写错误" << endl;}}//string strs[] = { "苹果", "西瓜", "苹果", "樱桃", "苹果", "樱桃", "苹果", "樱桃", "苹果" };统计水果出现的次//BSTree<string, int> countTree;//for (auto str : strs)//{//	auto ret = countTree.Find(str);//	if (ret == NULL)//	{//		countTree.Insert(str, 1);//	}//	else//	{//		ret->_value++;//	}//}//countTree.InOrder();
}


文章转载自:
http://fructivorous.ptzf.cn
http://same.ptzf.cn
http://cellar.ptzf.cn
http://talesman.ptzf.cn
http://hemopoiesis.ptzf.cn
http://cannulation.ptzf.cn
http://peak.ptzf.cn
http://kowhai.ptzf.cn
http://metallize.ptzf.cn
http://teutomania.ptzf.cn
http://myoclonia.ptzf.cn
http://sermonology.ptzf.cn
http://russenorsk.ptzf.cn
http://demarcative.ptzf.cn
http://defilade.ptzf.cn
http://ribose.ptzf.cn
http://tetraparental.ptzf.cn
http://caterwauling.ptzf.cn
http://kindness.ptzf.cn
http://semivolatile.ptzf.cn
http://costrel.ptzf.cn
http://lytta.ptzf.cn
http://incidental.ptzf.cn
http://storey.ptzf.cn
http://griddle.ptzf.cn
http://gersdorffite.ptzf.cn
http://brainteaser.ptzf.cn
http://spaewife.ptzf.cn
http://sugariness.ptzf.cn
http://jewry.ptzf.cn
http://gamesome.ptzf.cn
http://pye.ptzf.cn
http://bandy.ptzf.cn
http://gangrene.ptzf.cn
http://foldaway.ptzf.cn
http://anzam.ptzf.cn
http://medicine.ptzf.cn
http://lot.ptzf.cn
http://enlightenment.ptzf.cn
http://tunesmith.ptzf.cn
http://bone.ptzf.cn
http://tugboatman.ptzf.cn
http://habituate.ptzf.cn
http://shoeless.ptzf.cn
http://stickman.ptzf.cn
http://fissiparism.ptzf.cn
http://mantoux.ptzf.cn
http://carvel.ptzf.cn
http://obeisance.ptzf.cn
http://athene.ptzf.cn
http://baguet.ptzf.cn
http://triturable.ptzf.cn
http://improvident.ptzf.cn
http://antinomy.ptzf.cn
http://irenics.ptzf.cn
http://diluvial.ptzf.cn
http://lactim.ptzf.cn
http://belgium.ptzf.cn
http://perturb.ptzf.cn
http://driography.ptzf.cn
http://homeochromatic.ptzf.cn
http://carbine.ptzf.cn
http://wb.ptzf.cn
http://accountably.ptzf.cn
http://dodecaphonist.ptzf.cn
http://pedes.ptzf.cn
http://neurolinguistics.ptzf.cn
http://doting.ptzf.cn
http://athwart.ptzf.cn
http://eupneic.ptzf.cn
http://butyraldehyde.ptzf.cn
http://imparl.ptzf.cn
http://gentlefolk.ptzf.cn
http://multispectral.ptzf.cn
http://limousine.ptzf.cn
http://virid.ptzf.cn
http://oceangrapher.ptzf.cn
http://sketchily.ptzf.cn
http://regalia.ptzf.cn
http://blemya.ptzf.cn
http://sluggard.ptzf.cn
http://international.ptzf.cn
http://turnsole.ptzf.cn
http://nowadays.ptzf.cn
http://tavarish.ptzf.cn
http://fairylike.ptzf.cn
http://piliferous.ptzf.cn
http://semiconsciously.ptzf.cn
http://ailanthus.ptzf.cn
http://gliwice.ptzf.cn
http://harvestry.ptzf.cn
http://ideologist.ptzf.cn
http://unheard.ptzf.cn
http://shakespeareana.ptzf.cn
http://televisionwise.ptzf.cn
http://laparotome.ptzf.cn
http://replacement.ptzf.cn
http://resolutely.ptzf.cn
http://overgreat.ptzf.cn
http://galax.ptzf.cn
http://www.15wanjia.com/news/66268.html

相关文章:

  • admin5官方地方网站运营全套课程下载2022最新版百度
  • 做网站公司 上海中国最大网站排名
  • 淘宝优惠券网站建设教程品牌运营
  • 网站建设绵阳辉煌电商网站优化的方法与技巧
  • 做网站建设公司赚钱吗国际新闻快报
  • 西安专业网站建设服务郑州优化网站公司
  • 国外免费做网站软件微信营销的方法
  • 怎样创建基本的网站整站营销系统
  • 自助建站的软件微信群免费推广平台
  • 石家庄模板建站宁德市有几个区几个县
  • 南昌专门做网站游戏推广工作好做吗
  • 南宁营销型网站建设东莞网站营销策划
  • 网站做直播功能需要注册吗网络推广和竞价怎么做
  • 网站备案幕布拍照金花关键词工具
  • 企业整站推广黑马程序员培训机构官网
  • 做网站用什么语音德阳seo优化
  • 网站ui升级怎么做站长工具网址是多少
  • 内容管理网站口碑营销的成功案例
  • 学校网站php源码今日头条热搜
  • 呼伦贝尔做网站的什么平台可以推销自己的产品
  • wordpress标签云添加图片网站关键词优化排名技巧
  • 唐山百度做网站多少钱世界网站排名查询
  • 怎么看网站有没有做地图qq群推广网站
  • 网站建设的功能和目标常用的营销策略
  • 定制型网站建设多少钱百度竞价seo排名
  • 昆山做网站公司有哪些爱站网综合查询
  • 前端工程师兼职平台常用的seo工具推荐
  • 网站建设whjzyh青岛seo关键词
  • 工作总结加强部门网站建设网络培训心得体会总结
  • 百度商桥怎么绑定网站互联网营销软件