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

如何用织梦cms做网站网推拉新app推广接单平台

如何用织梦cms做网站,网推拉新app推广接单平台,简洁大气国内企业网站,陕西省建设工程造价管理协会网站首先查找元素是否在二叉搜索树中,如果不存在,则返回 要删除的结点可能分下面四种情况: a. 要删除的结点无孩子结点 b. 要删除的结点只有左孩子结点 c. 要删除的结点只有右孩子结点 d. 要删除的结点有左、右孩子结点 看起来有待删除节点有4中…

首先查找元素是否在二叉搜索树中,如果不存在,则返回

要删除的结点可能分下面四种情况:

a. 要删除的结点无孩子结点

b. 要删除的结点只有左孩子结点

c. 要删除的结点只有右孩子结点

d. 要删除的结点有左、右孩子结点

看起来有待删除节点有4中情况,实际情况a可以与情况b或者c合并起来,因此真正的删除过程如下:

情况1:删除该结点 且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除

情况2:删除该结点 且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除

情况3:找它的右子树的最小值或者左子树的最大值用它的值填补到被删除节点中,再来处理该结点的删除问题--替换法删除

tip:

我们可以把一个父节点看作父亲,每一个父亲只能照顾两个儿子

情况1和情况2:如果这个父亲只有一个孩子要照顾,或者一个也没有,那么他想要脱身,只需要把这个孩子托付给他的长辈,没有就是nullptr,我们可以把这个过程叫托孤

情况3:就比较复杂,这个父亲有两个孩子,托孤就行不通了,所以他要找一个人来代替他,他需要满足两个条件:

首先,要确保他是可以脱身的(他要是有一个孩子就托孤),这样他就可以过来照顾这两个孩子了

其次,他要满足照顾这两个孩子的条件,这个节点的key值要比左子树的每个节点key都要大,比右子树的每个节点key都要小,

右子树的最小值或者左子树的最大值就满足这些条件,我们可以把这个过程叫找月嫂

bool Erase(const K& data)
{node* parent = nullptr;node* cur = _root;while (cur && cur->_data != data)//找要删除的位置{parent = cur;if (data < cur->_data){cur = cur->_left;}else{cur = cur->_right;}}if (cur == nullptr)return false;if (cur->_left == nullptr)//托孤给父母{if (parent == nullptr)//考虑特殊root==nullptr{_root = cur->_right;}else{if (cur->_data < parent->_data)parent->_left = cur->_right;elseparent->_right = cur->_right;}delete cur;}else if (cur->_right == nullptr)//托孤给父母{if (parent == nullptr)//考虑特殊root==nullptr{_root = cur->_left;}else{if (cur->_data < parent->_data)parent->_left = cur->_left;elseparent->_right = cur->_left;}delete cur;}else//找月嫂替代(合适 有且只有一个娃或者没有){node* maxleft = cur->_left;node* maxparent = cur;while (maxleft->_right){maxparent = maxleft;maxleft = maxleft->_right;}cur->_data = maxleft->_data;// maxparent->_right = maxleft->_left;错误//月嫂托孤if (maxparent->_left == maxleft)//maxparent==cur{maxparent->_left = maxleft->_left;}else{maxparent->_right = maxleft->_left;}delete maxleft;}return true;
}

注意特殊情况:

1.在情况一和情况二下,可能删除_root节点,在函数里面就需要特殊考虑

2.情况三,月嫂的托孤,月嫂不一定是父亲的右孩子(左子树最大值的前提下),月嫂可能就是要被删除节点的左孩子,所以也要妥善处理

递归版

bool _EraseR(node*& root, const K& data)
{if (root == nullptr)return false;if (data < root->_data)return _EraseR(root->_left, data);else if (data > root->_data)return _EraseR(root->_right, data);else{node* del = root;if (root->_left == nullptr){root = root->_right;delete del;}else if (root->_right == nullptr){root = root->_left;delete del;}else{node* maxleft = root->_left;while (maxleft->_right)maxleft = maxleft->_right;del = maxleft;swap(root->_data, maxleft->_data);_EraseR(root->_left, data);//转为子问题}return true;}
}

node*& root

1.就不需要再找父节点了,这样还少了判断,被删除节点是父亲节点的左孩子还是右孩子

2.对于删除根节点的处理也可以不用特殊处理

_EraseR(root->_left, data);//转为子问题

月嫂托孤的过程,转变为删除月嫂节点

搜索二叉树的删除时间复杂度O(N)

http://www.ritt.cn/news/27185.html

相关文章:

  • 免费做网站百度能录入最新的新闻 今天
  • 做商城网站的项目背景图片营销效果分析怎么写
  • 北京矿建建设集团有限公司 网站深圳外包seo
  • 做环保是跑还是网站卖深圳百度推广公司
  • 绍兴做公司网站的公司微信小程序
  • 网站架构包括哪些免费引流在线推广
  • wordpress能否做网站seo外链推广员
  • 网站开发论坛百度客服中心人工在线咨询
  • 建设工程许可证在那个网站办自媒体是如何赚钱的
  • 网站后台显示连接已重置域名查询站长之家
  • 网站推广有什么方法有哪些关键词排名查询
  • 北京做网站建设的公司排名做网站要多少钱
  • 哪些网站设计的比较好爱站网关键词挖掘
  • 网络推广提成方案360优化大师最新版下载
  • 做二手车按揭的网站外包推广公司
  • 学校网站建设工作会议网站数据分析
  • 中华人民共和国住房和城乡建设厅网站培训课程设计
  • wordpress google提交西安百度关键词优化排名
  • wap网站 视频教程百度手机助手最新版下载
  • 安阳网站关键词优化成都网站维护
  • 网站备案怎么更改兰州网络推广优化服务
  • u9u8网站建设代运营一家店铺多少钱
  • dw是做网站怎么给表格影藏代写平台
  • 网站上传后如何设置首页成都移动seo
  • 怎么做五个页面网站seo基础培训教程
  • 中小型网站设计哪家好网站搜索优化技巧
  • 先做网站 先备案合肥百度推广排名优化
  • 网站中qq跳转怎么做的seo关键词优化是什么意思
  • 如何建设好政府门户网站河南郑州最新消息
  • 怎么样把网站做火微信朋友圈广告推广