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

网站设计团队名称新华书店的做的数字阅读网站

网站设计团队名称,新华书店的做的数字阅读网站,购物网站制作例子,手机兼职工作有哪些前面写了初阶数据结构——二叉树#xff1b;本文内容是来对它来进行结尾 目录 一概念 二实现 2.1查找 2.2插入 2.3删除 完整源代码 三二叉树的应用 四二叉搜索树的性能分析 五二叉搜索树相关的面试题 一概念 二叉搜索树又称二叉排序树#xff0c;它或者是一棵空树…前面写了初阶数据结构——二叉树本文内容是来对它来进行结尾 目录 一概念 二实现 2.1查找 2.2插入  2.3删除 完整源代码 三二叉树的应用  四二叉搜索树的性能分析 五二叉搜索树相关的面试题 一概念 二叉搜索树又称二叉排序树它或者是一棵空树或者是具有以下性质的二叉树: *  若它的左子树不为空则左子树上所有节点的值都小于根节点的值 ** 若它的右子树不为空则右子树上所有节点的值都大于根节点的值 ***它的左右子树也分别为二叉搜索树 二实现 以下面的二叉搜索树为例 2.1查找 a、从根开始比较查找比根大则往右边走查找比根小则往左边走查找。 b、走到到空还没找到这个值不存在。 bool find(const K val) {Node* cur _root;while (cur){if (cur-_key val){cur cur-_right;}else if (cur-_key val){cur cur-_left;}else{//相等return true;}}return false; } 2.2插入  a. 树为空则直接新增节点赋值给root指针 b. 树不空按二叉搜索树性质查找插入位置插入新节点 bool insert(const K val) {if (_root nullptr){_root new Node(val);return true;}else{Node* parent nullptr;Node* cur _root;while (cur){if (cur-_key val){parent cur;cur cur-_right;}else if (cur-_key val){parent cur;cur cur-_left;}else{//相等return false;}}//判断要在parent的左还是右进行插入cur new Node(val);if (parent-_key val){parent-_left cur;}else{parent-_right cur;}return true;} } 2.3删除 a先通过二叉搜索树的性质找到节点的位置 b分析删除节点的左右孩子的情况 无左右孩子节点(不考虑) 只有左孩子节点删除之前把左孩子交给父亲节点 只有右孩子节点删除之前把右孩子交给父亲节点 右孩子节点都有有两种解决方法 1找左节点的最大值的节点Max:Max的val与待删除的val进行交换 2找右孩子的最小值的节点Min:Min的val与待删除的val进行交换 以第二种为例来设计代码 要注意对特殊情况的处理(删除根节点的情况) 特别要记录cur(删除节点)的父节点(cur在父节点的左边还是右边不清楚)  bool erase(const K val) {if (_root nullptr) return false;Node* parent nullptr;Node* cur _root;while (cur){if (cur-_key val){parent cur;cur cur-_right;}else if (cur-_key val){parent cur;cur cur-_left;}else{//找到删除位置//右孩子为空if (cur-_right nullptr){//cur是根节点if (parent nullptr) _root cur-_left;//cur的左孩子交给parentelse{if (parent-_left cur) parent-_left cur-_left;else if (parent-_right cur) parent-_right cur-_left;}delete cur;}//右孩子为空else if (cur-_left nullptr){//cur_rootif (parent nullptr) _root cur-_right;else{if (parent-_left cur) parent-_left cur-_right;else if (parent-_right cur) parent-_right cur-_right;}delete cur;}//都有else{//找到右节点的最小值进行替换删除左节点的最大值//要删除的可能是_root patent不能为nullptrNode* ParentRightMin cur;Node* RightMin cur-_right;while (RightMin-_left){ParentRightMin RightMin;RightMin RightMin-_left;}swap(RightMin-_key, cur-_key);//RightMin的右子树交给ParentRightMinif (ParentRightMin-_right RightMin){ParentRightMin-_right RightMin-_right;}else{ParentRightMin-_left RightMin-_right;}delete RightMin;}return true;}}return false; } 完整源代码 #pragma once #includeiostream using namespace std;namespace bit {templateclass Kstruct Node{Node(const K key K()):_left(nullptr), _right(nullptr), _key(key){}NodeK* _left;NodeK* _right;K _key;};templateclass Kclass BSTree{typedef NodeK Node;public:bool insert(const K val){if (_root nullptr){_root new Node(val);return true;}else{Node* parent nullptr;Node* cur _root;while (cur){if (cur-_key val){parent cur;cur cur-_right;}else if (cur-_key val){parent cur;cur cur-_left;}else{//相等return false;}}//判断要在parent的左还是右进行插入cur new Node(val);if (parent-_key val){parent-_left cur;}else{parent-_right cur;}return true;}}bool find(const K val){Node* cur _root;while (cur){if (cur-_key val){cur cur-_right;}else if (cur-_key val){cur cur-_left;}else{//相等return true;}}return false;}bool erase(const K val){if (_root nullptr) return false;Node* parent nullptr;Node* cur _root;while (cur){if (cur-_key val){parent cur;cur cur-_right;}else if (cur-_key val){parent cur;cur cur-_left;}else{//找到删除位置//右孩子为空if (cur-_right nullptr){//cur是根节点if (parent nullptr) _root cur-_left;//cur的左孩子交给parentelse{if (parent-_left cur) parent-_left cur-_left;else if (parent-_right cur) parent-_right cur-_left;}delete cur;}//右孩子为空else if (cur-_left nullptr){//cur_rootif (parent nullptr) _root cur-_right;else{if (parent-_left cur) parent-_left cur-_right;else if (parent-_right cur) parent-_right cur-_right;}delete cur;}//都有else{//找到右节点的最小值进行替换删除左节点的最大值//要删除的可能是_root patent不能为nullptrNode* ParentRightMin cur;Node* RightMin cur-_right;while (RightMin-_left){ParentRightMin RightMin;RightMin RightMin-_left;}swap(RightMin-_key, cur-_key);//RightMin的右子树交给ParentRightMinif (ParentRightMin-_right RightMin){ParentRightMin-_right RightMin-_right;}else{ParentRightMin-_left RightMin-_right;}delete RightMin;}return true;}}return false;}//进行套壳void _InOrder(){InOrder(_root);cout endl;}private:void InOrder(const Node* _root){if (_root nullptr) return;InOrder(_root-_left);cout _root-_key ;InOrder(_root-_right);}private:Node* _rootnullptr;};void Test1(){BSTreeint sb;sb.insert(3);sb.insert(2);sb.insert(4);sb._InOrder();sb.erase(3);sb.erase(2);sb.erase(4);sb._InOrder();} } 三二叉树的应用  KV模型 每一个关键码key都有与之对应的值Value即Key, Value的键值对。该种方式在现实生活中非常常见 比如英汉词典就是英文与中文的对应关系通过英文可以快速找到与其对应的中文英 文单词与其对应的中文word, chinese就构成一种键值对 //对二叉搜索树进行改造 templateclass K,class V struct Node {Node(const K key K(),const V valV()):_left(nullptr), _right(nullptr), _key(key),_val(val){}NodeK,V* _left;NodeK,V* _right;K _key;V _val; }; templateclass K,class V class BSTree {typedef NodeK,V Node; public:bool Insert(const K val,const K valute){if (_root nullptr){_root new Node(val,valute);return true;}else{Node* parent nullptr;Node* cur _root;while (cur){if (cur-_key val){parent cur;cur cur-_right;}else if (cur-_key val){parent cur;cur cur-_left;}else{//相等return false;}}//判断要在parent的左还是右进行插入if (parent-_key val){parent-_left new Node(val,valute);}else{parent-_right new Node(val,valute);}return true;}}Node* Find(const V val){Node* cur _root;while (cur){if (cur-_key val){cur cur-_right;}else if (cur-_key val){cur cur-_left;}else{//相等return cur;}}return nullptr;}void _InOrder(){InOrder(_root);}private:void InOrder(const Node* _root){if (_root nullptr) return;InOrder(_root-_left);cout _root-_key endl;InOrder(_root-_right);}Node* _root nullptr; };void Test1() {// 输入单词查找单词对应的中文翻译BSTreestring, string dict;dict.Insert(string, 字符串);dict.Insert(tree, 树);dict.Insert(left, 左边、剩余);dict.Insert(right, 右边);dict.Insert(sort, 排序);// 插入词库中所有单词string str;while (cin str){Nodestring, string* ret dict.Find(str);if (ret nullptr){cout 单词拼写错误词库中没有这个单词: endl;}else{cout 中文翻译: ret-_val endl;}} } 四二叉搜索树的性能分析 插入和删除操作都必须先查找查找效率代表了二叉搜索树中各个操作的性能。  但二叉搜索树在不同的场景可能会有以下结构 最优情况下二叉搜索树为完全二叉树(或者接近完全二叉树)其平均比较次数为long2N 最差情况下二叉搜索树退化为单支树(或者类似单支)其平均比较次数为N方 而在这种最差的情况下是有办法去去对它进行调整将二叉树进行旋转这个我们下文在说 五二叉搜索树相关的面试题 1. 二叉树创建字符串。oj链接 2. 二叉树的分层遍历1。oj链接 3. 二叉树的分层遍历2。oj链接 4. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 。oj链接 5. 二叉树搜索树转换成排序双向链表。oj链接 6. 根据一棵树的前序遍历与中序遍历构造二叉树。 oj链接 7. 根据一棵树的中序遍历与后序遍历构造二叉树。oj链接 8. 二叉树的前序遍历非递归迭代实现 。oj链接 9. 二叉树中序遍历 非递归迭代实现。oj链接 10. 二叉树的后序遍历 非递归迭代实现。oj链接 以上便是我在学习二叉搜索树的相关内容有错误欢迎在评论区指正谢谢
http://www.pierceye.com/news/879767/

相关文章:

  • 贵州网站备案延庆网站建设师
  • 做网站怎么上词网站建设战略伙伴
  • 绵阳网站推广排名给网站网站做代理
  • 网站轮播代码北京的公司有哪些
  • 网上书城网站开发外文参考文献wordpress禁用谷歌字体插件
  • 团购模板网站全网营销型网站建设模板
  • ac域名网站邯郸中国建设银行网站
  • 广州seo网站开发微信营销的优势
  • 宝塔可以做二级域名网站么有哪些好的做兼职网站
  • 网站建设公司落寞特殊符号网名生成器
  • 设计分享网站在闲鱼可以做网站吗
  • 安全等级保护每个网站必须做吗实惠的网站建设公司
  • vue可以做pc端网站山东专业企业网站建设
  • 推广网站软文高中网站制作
  • 做h的动漫在线观看网站安阳市有几个区几个县
  • 帝国cms地方门户网站模板怀集县住房和城乡规划建设网站
  • 河北住房建设厅网站首页怎么自己建设网站
  • 政务网站建设及安全下载app赚钱的平台
  • 如何制作一个论坛网站都江堰建设局网站
  • 网站建设seo优化浙江广17网站一起做网店
  • WordPress子站站群优化教程网站推广排名
  • 毕设做购物网站容易吗网上商城是什么意思
  • 1688阿里巴巴官方网站杭州网站建设seo
  • 建设网站选什么地方的主机网站上漂亮的甘特图是怎么做的
  • 用什么软件来建网站立创电子元器件商城官网
  • 做视频网站成本如何定制微信小程序
  • 南宁市有哪些做网站的外包企业青州网站建设公司
  • 网站排名点击中国建筑是国企还是央企
  • 广告联盟的网站怎么做太仓苏州网站建设
  • 杭州 seo网站建设 网络服务包头企业网站