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

福州哪里制作网站全国企业公示信息公示网官网

福州哪里制作网站,全国企业公示信息公示网官网,两学一做网站条幅,国家高新技术企业认定的要求二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它具有以下特征: 若它的左子树不为空,则…

二叉搜索树

  • 一、认识二叉搜索树
  • 二、二叉搜索树实现
    • 2.1插入
    • 2.2查找
    • 2.3删除
  • 总结

在这里插入图片描述

一、认识二叉搜索树

二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它具有以下特征:

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

如图:
在这里插入图片描述

二、二叉搜索树实现

在实现各种操作之前,我们先创建节点,使用结构体+类模板来创建,因为结构体默认访问权限是共有的(即public),里面需要写到左子树、右子树、结点的值,再写个构造函数赋初值。

template<class K>
struct  BStreeNode
{BStreeNode<K>* _left;BStreeNode<K>* _right;K _key;BStreeNode(const K& key):_left(nullptr),_right(nullptr),_key(key){}
};

2.1插入

插入操作步骤:

  • 树为空,则直接新增节点,赋值给root指针
  • 树不空,按二叉搜索树性质查找插入位置,插入新节点

解析:

  • 首先while循环进行遍历,若该key值比cur值小,则向cur左树找,反之,右树找,直到叶子节点为止。如果与cur值相同,返回false(因为二叉搜索树不允许有相同的数出现)。

  • 插入过程需要连接,创建个parent节点跟着我们需要遍历的节点(cur)完成连接过程。

  • 跟父节点比较,比父节点大,插入到他的右边,反之,就是左边。


代码:

bool insert(const K& key)
{if (_root == nullptr){_root = new node(key);return true;}node* parent = nullptr;node* cur = _root;////cur每次要向下走,parent也跟着走while (cur){if (key< cur->_key ){parent = cur;cur = cur->_left;}else if (key> cur->_key){parent = cur;cur = cur->_right;}else{return false;}}cur = new node(key);if (parent->_key < key){//如果插入的值比目标值大,就连接在右边;parent->_right = cur;}else{parent->_left = cur;}return true;
}

2.2查找

若key大于cur->_key就从右树找
key小于cur->_key就从左子树找。
如果相等 返回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 {return true;}}return false; 
}

2.3删除

1、首先定义个父节点parent和节点cur(指向根节点)
2、再循环遍历cur,先找要删除的节点。

  • 若删除的节点左数为空,且删除的是根节点,让根结点指向原根结点的右子树。删除的不是根节点,让他的子树托孤给他的父节点。
  • 如果右节点空,删除的是根节点,让他的根节点只想原根结点的左子树,不是根节点,就托孤给父节点
  • 左右都不为空的情况下。父节点指向cur,leftnode(被删节点的左子树)指向cur的左子树,循环遍历leftnode右子树,交换cur与leftnode值,如果leftnode在父节点的左子树,那就将leftnode的左子树给父节点的左子树,否则就给父节点的右子树。最后将leftnode传给cur,再删除cur.
bool Erase(const K& key)
{node* parent = nullptr;node* cur = _root;//没有节点while (cur){//找if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{//找到了  左空if (cur->_left == nullptr){if (cur == _root)//如果cur没有parent,他就是根节点{_root = cur->_right;}else {if (parent->_right == cur)//如果cur右为空,并且是父亲的右节{//节点指向curparent->_right = cur->_right;}else{parent->_left = cur->_right;}}}//else if (cur->_right == nullptr)//如果cur右为空。{ if (cur == _root){_root = cur->_left;}else{if (parent->_right == cur){parent->_right = cur->_left;}else{parent->_left = cur->_left;}}}else {node* parent = cur;node* leftnode = cur->_left;//右边不为空的情况,一直找下去while (leftnode->_right){parent = leftnode;//每次走之前给parentleftnode = leftnode->_right;}swap(cur->_key, leftnode->_key);if (parent->_left == leftnode){parent->_left = leftnode->_left;}else{parent->_right = leftnode->_left;}cur = leftnode; }delete cur;return true;}}
}

总结

以上就是本期内容,以后会多多更新

http://www.15wanjia.com/news/172142.html

相关文章:

  • 做企业网站找哪家微网站 举例
  • 做百度推广会送网站吗wordpress 用户增强
  • 教做奥数的网站旅游网站作用
  • 可以做策略回测的网站c 网站登录验证码怎么做
  • 南宁网站排名外包深圳深圳网站开发
  • 小说网站建立网页美工设计图片
  • 目前做哪些网站能致富商城网站开发多少钱
  • 滨海做网站哪家最好建设旅游网站目的
  • 湘潭做网站价格问下磐石网络我注册过的网站
  • 镇江市扬中市做网站陕西网站建设通报
  • 网站建设适合手机定制开发网站如何报价单
  • 网站开发 需求说明书网页怎么搜索关键词
  • 枣庄手机网站建设公司企业网页设计教程
  • 米拓做网站图片在哪里删掉wordpress 页面模板插件
  • 网站建设大德通洛阳网站建设多少钱
  • 河北建设网站首页网站的空间是什么
  • 检察院门户网站建设情况章丘做网站单位哪家好
  • 河南省省建设厅网站选择做印象绍兴网站的原因
  • 现在建设一个网站需要什么技术广告公司名字大全最新
  • thinkphp做网站有什么好处您网站建设
  • 濮阳家电网站建设本地主机做网站
  • 公司网站制作门槛做背景音乐的版权网站
  • 自学网站建设要多久郑州网站推广技术
  • 企业网站开发设计哪里建网站好
  • 网站色调选择如何做优秀的视频网站设计
  • 兰山区网站建设推广成绩查询网站怎么做
  • 如何建设简易网站如何组做网站
  • 贵州省都匀市网站建设网站seo内链建设
  • 网站怎么做数据转移5988创业商机网
  • 网页是不是网站网站关键词收录查询