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

有关建筑的网站重庆网站建设接重庆零臻科技

有关建筑的网站,重庆网站建设接重庆零臻科技,徐州网站设计,备案网站名称怎么改目录 1、二叉搜索树概念 2、 二叉搜索树的插入 3、二叉搜索树的查找 4、二叉搜索树的删除 5、二叉搜索树的中序遍历 实现 1、二叉搜索树概念 二叉搜索树又称二叉排序树#xff0c;它或者是一棵空树 #xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空#…目录 1、二叉搜索树概念 2、 二叉搜索树的插入 3、二叉搜索树的查找 4、二叉搜索树的删除 5、二叉搜索树的中序遍历 实现 1、二叉搜索树概念 二叉搜索树又称二叉排序树它或者是一棵空树 或者是具有以下性质的二叉树 : 若它的左子树不为空则左子树上所有节点的值都小于根节点的值 若它的右子树不为空则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 定义一个二叉搜索树类 templateclass K struct BSTreeNode {BSTreeNodeK* _left;BSTreeNodeK* _right;K _key;BSTreeNode(const K key):_left(nullptr), _right(nullptr), _key(key){} };templateclass K class BSTree {typedef BSTreeNodeK Node; private:Node* _root nullptr; public:bool Insert(const K key); //插入bool Find(const K key); //查找bool Erase(const K key); //删除void InOrder(); //中序遍历void _InOrder(Node* root);}; 2、 二叉搜索树的插入 树为空则直接新增节点赋值给root指针 树不空按二叉搜索树性质查找插入位置插入新节点 templateclass K bool BSTreeK::Insert(const K key) {if (_root nullptr){_root new Node(key);return true;}Node* parent nullptr;Node* cur _root;while (cur ! nullptr){parent cur;if (cur-_key key){cur cur-_right;}else if (cur-_key key){cur cur-_left;}else{return false; //cur-_key key}}cur new Node(key);if (parent-_key key){parent-_right cur;}else{parent-_left cur;}return true; } 3、二叉搜索树的查找 从根开始比较查找比根大则往右边走查找比根小则往左边走查找。 最多查找高度次走到到空还没找到这个值不存在。 templateclass K bool BSTreeK::Find(const K key) {Node* cur _root;while (cur ! nullptr){if (key cur-_key) //key小于cur-_key,cur向左走{cur cur-_left;}else if (key cur-_key) //key大于于cur-_key,cur向右走{cur cur-_right;}else //key等于于cur-_key返回true{return true;}}return false; //不存在返回false} 4、二叉搜索树的删除 首先查找元素是否在二叉搜索树中如果不存在则返回 , 否则要删除的结点可能分下面四种情 况 要删除的结点无孩子结点 要删除的结点只有左孩子结点 要删除的结点只有右孩子结点 要删除的结点有左、右孩子结点 看起来有待删除节点有 4 中情况实际情况 a 可以与情况 b 或者 c 合并起来因此真正的删除过程 如下 删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除 删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除 在它的右子树中寻找中序下的第一个结点(关键码最小)用它的值填补到被删除节点中再来处理该结点的删除问题--替换法删除 替换法删除我们可以使用被删的节点的左子树的最大节点或者右子树的最小节点来替代被删的节点的值 templateclass K bool BSTreeK::Erase(const K key) {Node* parent nullptr;Node* cur _root;while (cur ! nullptr){if (cur-_key key){parent cur;cur cur-_right;}else if (cur-_key key){parent cur;cur cur-_left;}else //找到要删除的数{// 准备删除//分为三种情况//1、左为空//2、右为空//3、左右都不为空 if (cur-_left nullptr) //左为空{if (cur _root) //1、要删除的点为根节点{_root cur-_right;}else{if (cur parent-_left){parent-_left cur-_right;}else{parent-_right cur-_right;}}}else if (cur-_right nullptr) //右为空{if (cur _root) //1、要删除的点为根节点{_root cur-_left;}else{if (cur parent-_left){parent-_left cur-_left;}else{parent-_right cur-_left;}}}else //左右都不为空{//我们可以使用被删的节点的左子树的最大节点或者右子树的最小节点//来替代被删的节点的值Node* parent cur;Node* subLeft cur-_right;while (subLeft-_left){parent subLeft;subLeft subLeft-_left; // 右子树的最小节点(最左节点)}swap(cur-_key, subLeft-_key); //右子树的最小节点与被删节点的值交换if (subLeft parent-_left){parent-_left subLeft-_right;}else{parent-_right subLeft-_right;}}return true;}}return false; //没有找到要删除的数 }5、二叉搜索树的中序遍历 根据二叉搜索树的特性我们可以推出二叉搜索树的中序遍历是一个有序的数据 我们可以采用递归的方法去遍历 templateclass K void BSTreeK::InOrder() {_InOrder(_root);cout endl; } templateclass K void BSTreeK::_InOrder(Node* root) {if (root nullptr)return;_InOrder(root-_left);cout root-_key ;_InOrder(root-_right); } 实现 templateclass K struct BSTreeNode {BSTreeNodeK* _left;BSTreeNodeK* _right;K _key;BSTreeNode(const K key):_left(nullptr), _right(nullptr), _key(key){} };templateclass K class BSTree {typedef BSTreeNodeK Node; private:Node* _root nullptr; public:bool Insert(const K key); //插入bool Find(const K key); //查找bool Erase(const K key); //删除void InOrder(); //中序遍历void _InOrder(Node* root);};templateclass K bool BSTreeK::Insert(const K key) {if (_root nullptr){_root new Node(key);return true;}Node* parent nullptr;Node* cur _root;while (cur ! nullptr){parent cur;if (cur-_key key){cur cur-_right;}else if (cur-_key key){cur cur-_left;}else{return false; //cur-_key key}}cur new Node(key);if (parent-_key key){parent-_right cur;}else{parent-_left cur;}return true; }templateclass K bool BSTreeK::Find(const K key) {Node* cur _root;while (cur ! nullptr){if (key cur-_key) //key小于cur-_key,cur向左走{cur cur-_left;}else if (key cur-_key) //key大于于cur-_key,cur向右走{cur cur-_right;}else //key等于于cur-_key返回true{return true;}}return false; //不存在返回false}templateclass K bool BSTreeK::Erase(const K key) {Node* parent nullptr;Node* cur _root;while (cur ! nullptr){if (cur-_key key){parent cur;cur cur-_right;}else if (cur-_key key){parent cur;cur cur-_left;}else{// 准备删除 if (cur-_left nullptr) //左为空{if (cur _root){_root cur-_right;}else{if (cur parent-_left){parent-_left cur-_right;}else{parent-_right cur-_right;}}}else if (cur-_right nullptr) //右为空{if (cur _root){_root cur-_left;}else{if (cur parent-_left){parent-_left cur-_left;}else{parent-_right cur-_left;}}}else{//左右都不为空// 右树的最小节点(最左节点)Node* parent cur;Node* subLeft cur-_right;while (subLeft-_left){parent subLeft;subLeft subLeft-_left;}swap(cur-_key, subLeft-_key);if (subLeft parent-_left)parent-_left subLeft-_right;elseparent-_right subLeft-_right;}return true;}}return false; } templateclass K void BSTreeK::InOrder() {_InOrder(_root);cout endl; } templateclass K void BSTreeK::_InOrder(Node* root) {if (root nullptr)return;_InOrder(root-_left);cout root-_key ;_InOrder(root-_right); }
http://www.yutouwan.com/news/76652/

相关文章:

  • 如乐建站之家学会网站建设项目
  • 建站模板源码高端品牌网站建设公司哪家好
  • 阜阳哪里做网站的多河北 全部阳性了
  • 十大国外室内设计网站怎样在百度上建立网站
  • 网站开发设计手册电费由谁承担
  • 网站营销公司简介中建建设银行网站
  • 网站建设五行属什么icp备案信息查询系统
  • 衡阳网站建设网站做交友信息网站可行么
  • 廊坊电商网站建设wordpress推广提成
  • 酒店品牌网站建设推广大连模板建站系统
  • 企业网站建设的可行性企业查询系统 工商
  • 网页设计制作网站大一素材哈尔滨建设部网站
  • 长沙网站优化宝安做网站
  • 安丘网站开发大连市网站制作电话
  • 做公司网站用哪个公司比较好小工程施工合同协议书
  • 成都企业网站备案流程余姚专业网站建设公司
  • 网站建设和推广电话销售话术番禺大石网站建设
  • 手机网站建设视频教程、苏州马可波罗网站建设
  • 网站生成软件西安网站建设推广
  • 淄博临淄网站建设wordpress详细教程
  • 网站建设需求和页面需求怎么提自己做网站很难
  • 梅州建站方法泉州百度网站推广
  • 政务网站建设论文WordPress页面模板怎么选
  • 如何创建本地站点云南省住房与城乡建设厅网站
  • 网站开发的层次邵阳网站制作建设
  • 网站开发最重要的技巧个人空间网站免费
  • wordpress适合电影网站的模板空间站天宫vr全景
  • 怎么建设淘客自己的网站常熟建设合同备案在哪个网站
  • 金华网站建设luopan文具电子商务网站开发内容
  • 响水网站制作公司比赛网站开发