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

黄石网站建设网络公司如何在百度免费发布广告

黄石网站建设网络公司,如何在百度免费发布广告,广州网站优化服务商,自己怎么做一元购物网站欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻二叉搜索树概念 &#x1f4…

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


目录

  • 👉🏻二叉搜索树
    • 概念
  • 👉🏻二叉搜索树模拟实现
    • Insert插入
    • find查找
    • 中序遍历
    • Erase删除
    • InsertR递归插入
    • FindR递归查找
    • EraseR递归删除
  • 🍒BinarySearchTree.h

👉🏻二叉搜索树

概念

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:

  • 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  • 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  • 它的左右子树也分别为二叉搜索树

即:左<根<右

在这里插入图片描述

👉🏻二叉搜索树模拟实现

Insert插入

bool Insert(const K& key){if (_root == nullptr)//如果为空直接创建新结点{_root = new Node(key);return true;}Node* cur = _root;Node* parent = nullptr;while (cur)//key比当前cur结点的key值小往左边走,大则往右边走,直到遇到空{parent = cur;if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{return false;}}cur = new Node(key);//此时遇到空要创建新结点//但此时我们还要记得将其与parent连接起来,至于是在parent的左边还是右边,看比大小if (parent->_key < key){parent->_right = cur;}else{parent->_left = cur;}return true;}

过程即为:小于往左走,大于往右走,遇到空创建新结点,进行连接父节点

find查找

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;}elsereturn true;//相等说明找到,返回true}return false;}

中序遍历

void _InOrder(Node* root)//中序遍历{if (root == nullptr)return;_InOrder(root->_left);cout << root->_key << " ";_InOrder(root->_right);}void InOrder()//套一层{_InOrder(_root);cout << endl;}

Erase删除

首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情
况:
a. 要删除的结点无孩子结点
b. 要删除的结点只有左孩子结点
c. 要删除的结点只有右孩子结点
d. 要删除的结点有左、右孩子结点

而a情况可以归属于b和c任意一个情况,a情况当把结点删除后,父节点想向指向左右哪边都行,反正都为空无所谓。

  • 情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点–直接删除
  • 情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点–直接删除
  • 情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点
    中,再来处理该结点的删除问题–替换法删除

替换法删除:
1.要么从左子树中找到最大结点来替换
2.要么从右子树找到最小结点来替换

所以现在梳理一下代码思路
1.先找到要删除的结点位置,能找到再删除,找不到返回false
2.开始删除,判情况(b,c,d),对症下药

代码如下

bool Erase(const K& key){Node* cur = _root;Node* parent = nullptr;while (cur)//寻找要删除的结点{	if (cur->_key > key){parent = cur;cur = cur->_left;}else if (cur->_key < key){parent = cur;cur = cur->_right;}else{//找到了就可以开始删除了,但是要判情况,对症下药if (cur->_left == nullptr){//左边为空,则删除后,将父节点连接cur的右边if (cur == _root)//如果要删除的结点就是初始根结点{_root = cur->_right;}//先确定此时cur在父节点的左边还是右边if (cur == parent->_left){parent->_left = cur->_right;}else{parent->_right = cur->_right;}}else if (cur->_right == nullptr){//右边为空if (cur == _root)//如果要删除的结点就是初始根结点{_root = cur->_left;}if (cur == parent->_left){parent->_left = cur->_left;}else{parent->_right = cur->_left;}}else{//左右都不为空,此时用替换法//这里我们以寻找右边树最小值的替换法执行;而右边树最小值即可以认为就是右边树最左边结点Node* parent = cur;Node* subleft = cur->_right;while (subleft->_left)//当左边遇到空,说明此时subleft已经遍历到最左边{parent = subleft;subleft = subleft->_left;}//找到后,可以进行交换了swap(cur->_key, subleft->_key);//现在进行删除,而且删除情况属于a情况if (subleft == parent->_left){parent->_left = subleft->_right;//这边=subleft->_right或者subleft->_left都可以}else{parent->_right = subleft->_right;}}return true;}}return false;}

InsertR递归插入

bool _InsertR(Node*& root, const K& key)//递归插入{if (root == nullptr){root = new Node(key);//传引用的好处就是此时的root就是其父节点的左/右节点,无需记录父节点return true;}if (root->_key > key){_InsertR(root->_left, key);}else if (root->_key < key){_InsertR(root->_right, key);}elsereturn false;}

FindR递归查找

bool _FindR(Node* root, const K& key)//递归查找{if (root == nullptr)return false;if (root->_key > key){FindR(root->_left, key);}else if (root->_key < key){FindR(root->_right, key);}elsereturn true;}

EraseR递归删除

bool _EraseR(Node*& root, const K& key)//这里我们仍然用引用root,这样连接时就不用记录父节点了{if (root == nullptr)return false;if (root->_key < key){return _EraseR(root->_right, key);}else if (root->_key > key){return _EraseR(root->_left, key);}else{//开始删除if (root->_left == nullptr){//左为空root = root->_right;}else if (root->_right == nullptr){root = root->_left;}else{//左右都不为空//这里以寻找右子树最小值Node* subleft = root->_right;while (subleft->_left){subleft = subleft->_left;}swap(root->_key, subleft->_key);// 转换成在子树去递归删除return _EraseR(root->_right, key);}}}

🍒BinarySearchTree.h

#pragma once
#include <iostream>
using namespace std;
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* cur = _root;Node* parent = nullptr;while (cur)//key比当前cur结点的key值小往左边走,大则往右边走,直到遇到空{parent = cur;if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{return false;}}cur = new Node(key);//此时遇到空要创建新结点//但此时我们还要记得将其与parent连接起来,至于是在parent的左边还是右边,看比大小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;}elsereturn true;//相等说明找到,返回true}return false;}bool Erase(const K& key){Node* cur = _root;Node* parent = nullptr;while (cur)//寻找要删除的结点{	if (cur->_key > key){parent = cur;cur = cur->_left;}else if (cur->_key < key){parent = cur;cur = cur->_right;}else{//找到了就可以开始删除了,但是要判情况,对症下药if (cur->_left == nullptr){//左边为空,则删除后,将父节点连接cur的右边if (cur == _root)//如果要删除的结点就是初始根结点{_root = cur->_right;}//先确定此时cur在父节点的左边还是右边if (cur == parent->_left){parent->_left = cur->_right;}else{parent->_right = cur->_right;}}else if (cur->_right == nullptr){//右边为空if (cur == _root)//如果要删除的结点就是初始根结点{_root = cur->_left;}if (cur == parent->_left){parent->_left = cur->_left;}else{parent->_right = cur->_left;}}else{//左右都不为空,此时用替换法//这里我们以寻找右边树最小值的替换法执行;而右边树最小值即可以认为就是右边树最左边结点Node* parent = cur;Node* subleft = cur->_right;while (subleft->_left)//当左边遇到空,说明此时subleft已经遍历到最左边{parent = subleft;subleft = subleft->_left;}//找到后,可以进行交换了swap(cur->_key, subleft->_key);//现在进行删除,而且删除情况属于a情况if (subleft == parent->_left){parent->_left = subleft->_right;//这边=subleft->_right或者subleft->_left都可以}else{parent->_right = subleft->_right;}}return true;}}return false;}void InOrder()//套一层{_InOrder(_root);cout << endl;}bool FindR(const K& key){return _FindR(_root, key);}bool InsertR(const K& key){return _InsertR(_root,key);}bool EraseR(const K& key){return _EraseR(_root, key);}
private:bool _EraseR(Node*& root, const K& key)//这里我们仍然用引用root,这样连接时就不用记录父节点了{if (root == nullptr)return false;if (root->_key < key){return _EraseR(root->_right, key);}else if (root->_key > key){return _EraseR(root->_left, key);}else{//开始删除if (root->_left == nullptr){//左为空root = root->_right;}else if (root->_right == nullptr){root = root->_left;}else{//左右都不为空//这里以寻找右子树最小值Node* subleft = root->_right;while (subleft->_left){subleft = subleft->_left;}swap(root->_key, subleft->_key);// 转换成在子树去递归删除return _EraseR(root->_right, key);//root->_right或者root->_left都可以,反正都是空}}}bool _InsertR(Node*& root, const K& key)//递归插入{if (root == nullptr){root = new Node(key);//传引用的好处就是此时的root就是其父节点的左/右节点,无需记录父节点return true;}if (root->_key > key){_InsertR(root->_left, key);}else if (root->_key < key){_InsertR(root->_right, key);}elsereturn false;}bool _FindR(Node* root, const K& key)//递归查找{if (root == nullptr)return false;if (root->_key > key){FindR(root->_left, key);}else if (root->_key < key){FindR(root->_right, key);}elsereturn true;}void _InOrder(Node* root)//中序遍历{if (root == nullptr)return;_InOrder(root->_left);cout << root->_key << " ";_InOrder(root->_right);}Node* _root = nullptr;
};

如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长
在这里插入图片描述
在这里插入图片描述


文章转载自:
http://incompletive.wwxg.cn
http://calabar.wwxg.cn
http://reckoner.wwxg.cn
http://ghostwrite.wwxg.cn
http://limnology.wwxg.cn
http://closely.wwxg.cn
http://riddling.wwxg.cn
http://clamer.wwxg.cn
http://camisard.wwxg.cn
http://zoophyte.wwxg.cn
http://eudemon.wwxg.cn
http://initiate.wwxg.cn
http://kayo.wwxg.cn
http://intromittent.wwxg.cn
http://rearhorse.wwxg.cn
http://conditionality.wwxg.cn
http://dittogrphy.wwxg.cn
http://kahoolawe.wwxg.cn
http://sane.wwxg.cn
http://caeciform.wwxg.cn
http://prename.wwxg.cn
http://gentisin.wwxg.cn
http://thermionic.wwxg.cn
http://internet.wwxg.cn
http://photoglyph.wwxg.cn
http://unaccommodating.wwxg.cn
http://inherently.wwxg.cn
http://mighty.wwxg.cn
http://ending.wwxg.cn
http://infare.wwxg.cn
http://impermissibly.wwxg.cn
http://antimorph.wwxg.cn
http://ketosis.wwxg.cn
http://pong.wwxg.cn
http://standby.wwxg.cn
http://dalesman.wwxg.cn
http://telltale.wwxg.cn
http://nectarial.wwxg.cn
http://lockhole.wwxg.cn
http://shovel.wwxg.cn
http://angioma.wwxg.cn
http://nightwork.wwxg.cn
http://triploid.wwxg.cn
http://defunct.wwxg.cn
http://lansdowne.wwxg.cn
http://better.wwxg.cn
http://pharmacognosy.wwxg.cn
http://gaberdine.wwxg.cn
http://rebellion.wwxg.cn
http://pipage.wwxg.cn
http://antiblack.wwxg.cn
http://betrothed.wwxg.cn
http://deep.wwxg.cn
http://micrurgy.wwxg.cn
http://ethnarch.wwxg.cn
http://anthotaxy.wwxg.cn
http://otoscope.wwxg.cn
http://countermine.wwxg.cn
http://leucocidin.wwxg.cn
http://roselite.wwxg.cn
http://dreadful.wwxg.cn
http://covey.wwxg.cn
http://preserving.wwxg.cn
http://gelsemium.wwxg.cn
http://sulfonation.wwxg.cn
http://shable.wwxg.cn
http://out.wwxg.cn
http://pyemic.wwxg.cn
http://imprimis.wwxg.cn
http://asyndetic.wwxg.cn
http://containershipping.wwxg.cn
http://auding.wwxg.cn
http://taxpaying.wwxg.cn
http://questura.wwxg.cn
http://pragmatic.wwxg.cn
http://bartizan.wwxg.cn
http://unalterable.wwxg.cn
http://carneous.wwxg.cn
http://mingle.wwxg.cn
http://conduction.wwxg.cn
http://mediae.wwxg.cn
http://gustav.wwxg.cn
http://denary.wwxg.cn
http://geranial.wwxg.cn
http://whitmonday.wwxg.cn
http://itself.wwxg.cn
http://prescience.wwxg.cn
http://metatarsus.wwxg.cn
http://dissatisfaction.wwxg.cn
http://antiradical.wwxg.cn
http://cholecystography.wwxg.cn
http://eutrophicate.wwxg.cn
http://tussah.wwxg.cn
http://transcendency.wwxg.cn
http://earshot.wwxg.cn
http://quercitron.wwxg.cn
http://mapping.wwxg.cn
http://inwards.wwxg.cn
http://nonhibernating.wwxg.cn
http://dewret.wwxg.cn
http://www.hrbkazy.com/news/82598.html

相关文章:

  • 贵南网站建设百度关键词优化公司哪家好
  • 大学网站方案设计百度上免费创建网站
  • 网站建设知识库色盲悖论
  • 做国际物流需要自己的网站吗免费网站建设制作
  • 网站推广策略方法网络怎么推广自己的产品
  • 余姚网站建设公司石家庄高级seo经理
  • 表白网站怎么做推广方案的推广内容怎么写
  • 华为域名购买结构优化设计
  • 专业网站建设公司推荐网站建设公司地址在哪
  • 烟台做网站哪家好网络营销课程心得体会
  • 信息发布网站设计世界新闻
  • 一般做网站的软件百度资源平台链接提交
  • 个人网站做外链方法黄页网站推广
  • 吉林省建设厅网站首页seo网站诊断报告
  • 武汉做网站icpseo搜索引擎优化排名哪家更专业
  • 为什么广州政府网站做的不好营销系统
  • 藁城网站建设北京百度总部电话
  • 淘宝网站制作建设是真的吗成品网站1688入口的功能介绍
  • 怎样制作一个二维码关键词seo公司真实推荐
  • 做景区网站建设的公司seo网站推广主要目的不包括
  • 做网站月入5万百度推广怎么运营
  • 做网站背景图怎么插百度网盘下载慢怎么解决
  • 亳州有做网站的吗万网域名交易
  • wordpress中的get_links函数讲解冯宗耀seo教程
  • 广州做网站建设公司网站推广
  • 免费建设网站入驻搜索排名优化
  • 中国智慧城市建设门户网站推广软件有哪些
  • 网站做行测题关键词排名seo优化
  • 网站策划要遵循的原则google浏览器官方
  • 四川建设网中标公示seo营销技巧培训班