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

临沂做网站电话制作网站的图片素材

临沂做网站电话,制作网站的图片素材,交易网站建设需要学什么,公司微信网站开发一、概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者具有以下性质的二叉树: 若它的左子树不为空,则左树上所有节点的值都小于根节点的值。 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。 它…

一、概念

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

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

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

它的左右子树也分别为二叉搜索树。最多找O(N)。

二、查找、插入、删除

插入

bool Insert(K& k)
{if (_root == nullptr){_root = new BSNode(k);return true;}BSNode* cur = _root;BSNode* parent = nullptr;while (cur){if (cur->_k < k){parent = cur;cur = cur->_right;}else if (cur->_k > k){parent = cur;cur = cur->_left;}}if (parent->_k < k){parent->_right = new BSNode(k);}else if (parent->_k > k){parent->_left = new BSNode(k);}else{return false;}return true;
}

查找

bool Find(K k)
{BSNode* cur = _root;while (cur){if (cur->_k < k){cur = cur->_right;}else if (cur->_k > k){cur = cur->_left;}else{return true;}}return false;
}

删除

依次删除7、14、3、8。7和14属于直接删除的场景

3、8属于需要替换法进行删除的场景。

1、没有孩子

2、一个孩字

3、两个孩子,需要进行替换,也就是替换法,用左子树的最大节点或者右子树的最小节点。

最大节点为最右节点,最小节点就是最左节点 ,还需要处理要删除的节点为根节点,它没有左子树或者没有右子树的情况。

还有一种情况就是leftmax就是root的左子树的根,此时parent为nullptr所以我们需要让parent = cur

void Erase(K& k)
{BSNode* cur = _root;BSNode* parent = nullptr;while (cur){if (cur->_k < k){parent = cur;cur = cur->_right;}else if (cur->_k > k){parent = cur;cur = cur->_left;}else{//开始托孤//要删除的节点,左孩子为空if (cur->_left == nullptr){//需要判断删除节点就是根节点的情况if (cur == _root){_root = cur->_right;}else{if (parent->_right == cur){parent->_right = cur->_right;}else{parent->_left = cur->_right;}}}else if (cur->_right == nullptr){if (cur == _root){_root = cur->_left;}else{if (parent->_right == cur){parent->_right = cur->_left;}else {parent->_left = cur->_left;}}}else //两个孩子的情况,就需要替代法来删除{//找到左子树中最大的节点BSNode* leftMax = cur->_left;//注意为什么这里等于cur;BSNode* parent = cur;  while (leftMax->_right){parent = leftMax;leftMax = leftMax->_right;}//找到以后把删除节点和leftmax节点的值做交换std::swap(cur->_k, leftMax->_k);//我们该把父亲的那个孩子和cur节点的孩子连接起来呢需要判断if (parent->_left == leftMax){parent->_left = leftMax->_left;}else{parent->_right = leftMax->_left;}cur = leftMax;}delete cur;cur = nullptr;}}
}

有序数组:二分查找,问题:插入删除效率不行

二叉搜索树:插入删除效率还行。

如果退化成下面的情况,插入删除的效率就变成了O(N),所以我们引出了AVL树红黑树B树系列。

接下来我们看一下递归版本的删除,插入和发现

bool _EraseR(BSNode*& root, const K& k)
{if (root == nullptr){return false;}if (root->_k < k){_EraseR(root->_right, k);}else if (root->_k > k){_EraseR(root->_left, k);}else{BSNode* del = root;if (root->_left == nullptr){root = root->_right;}else if (root->_right == nullptr){root = root->_left;}else{BSNode* leftMax = root->_left;while (leftMax->_right){leftMax = leftMax->_right;}std::swap(leftMax->_k, root->_k);return _EraseR(root->_left, k);}delete del;del = nullptr;return true;}
}
bool _InsertR(BSNode*& root,const K& k)
{if (root == nullptr){root = new BSNode(k);return true;}if (root->_k < k){_InsertR(root->_right, k);}else if (root->_k > k){_InsertR(root->_left, k);}else{return false;}
}
bool _FindR(BSNode* root, const K& k)
{if (root == nullptr)return false;BSNode* cur = root;if (cur->_k < k){_FindR(root->_right, k);}else if (cur->_k > k){_FindR(root->_left, k);}else{return true;}
}

http://www.yayakq.cn/news/170783/

相关文章:

  • 怎样做才能让百度搜到网站产品网站付费推广方式
  • 建设银行信用卡申请网站asp企业网站自助建站系统免费版超漂亮版
  • 做网站和做免费推广网站的区别wordpress media
  • 网站建设公司咋样wordpress跳转链接地址
  • 微管家里的微网站怎么建设商业公司的域名
  • 中国建设银行网站外汇wordpress 段落缩进
  • 做视频网站收费标准目前最火的互联网项目
  • 城市门户网站建设做画册找什么网站
  • 优化网站建设哪家专业小程序代理注册
  • 安徽区块链虚拟币网站开发方案四川绵阳网站建设
  • 凡客诚品网站设计做软件跟网站哪个难
  • 北京小程序开发平台网站优化排名的公司有哪些
  • 建筑投标网站网站续费如何做分录
  • 网站设置右击不了如何查看源代码php做的网站建设
  • 国外手机网站源码长沙手机网站建设哪些内容
  • 静态网站开发一体化课程sns社交网站开发
  • 网页设计与网站开发经济可行性怎样让自己网站的文章被百度收录
  • 枣阳建设局网站wordpress修改订阅者
  • 山东高端网站建设方案seo是搜索引擎吗
  • 移动端网站开发尺寸企业自建网站平台有哪些
  • html简单网页代码烟花网站建设排名优化公司哪家好
  • 上海高端网站建设公西安网站优化招聘
  • 部队网站建设报告dede网站模板页在什么文件夹
  • 万网备案域名购买搜网站首页不见了seo
  • 前端网站推荐看网站搜什么关键词
  • 招投标 网站建设 山西网站栏目排序
  • 嘉兴网站建设方案托管典当行网站
  • 网站建设轮播图青海省城乡建设厅网站
  • 保定集团网站建设贵港网站开发
  • 网站建设说明书c2c平台特点