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

源代码网站和模板做的区别网站业务员好做吗

源代码网站和模板做的区别,网站业务员好做吗,苏州网站建设新手,健康码哪家公司开发的目录 BST 的方法摘要查找节点四个引用#xff0c;都有妙用递归版非递归版 插入节点利用search的返回值更新高度的注意事项插入算法的完整代码 删除节点框架单分支#xff0c;直接替代双分支#xff0c;化繁为简代码 code BST 预告#xff1a;本文是后续实现各种各样平衡二叉… 目录 BST 的方法摘要查找节点四个引用都有妙用递归版非递归版 插入节点利用search的返回值更新高度的注意事项插入算法的完整代码 删除节点框架单分支直接替代双分支化繁为简代码 code BST 预告本文是后续实现各种各样平衡二叉搜索树的铺垫。 BST 的方法 方法 功能 参数 返回值 search 查找 T const val BinNode * insert 插入 T const val BinNode * remove 移除 T const val bool 摘要 虚函数方便派生类进行重写。全局静态模板函数适用于AVLSplayRedBlack等各种BST这里的remove一看就是对外的因为参数终于不是指针了而是值。需要我们先找位置。 查找节点 四个引用都有妙用 看到searchIn的声明居然全都是引用类型。 static BinNodeT * searchIn(BinNodeT * rt, BinNodeT * hot_node, T const val)列举这四个引用各自的功能—— 返回值引用插入节点时这个引用相当于插入位置后续我们将新节点的指针赋给到这个返回值父节点的左右孩子之一就会连上新节点。 BinNodeT * rt如果这个不是引用返回值返回的就是一个仅在函数内部的局部变量即形参后续改写这个引用值时会发生错误。 BinNodeT * hot_node在递归中随深度不断更新这个记忆热点也是为了方便插入算法等到最后退出时hot存的是插入位置的父节点。 T const val传递引用变量可以提速为了不误改前面加上const做约束。 递归版 virtual BinNodeT * search(T const val){return searchIn(BinTreeT::root, hot, val);}static BinNodeT * searchIn(BinNodeT * rt, BinNodeT * hot_node, T const val){if (!rt || rt-data val) return rt; // 返回的是引用hot_node rt; //在递归中随深度不断更新if (val rt-data) return searchIn(rt-left, hot_node, val);else return searchIn(rt-right, hot_node, val);}非递归版 尾递归转迭代略。 插入节点 利用search的返回值 有了查找节点算法中“记忆热点”hot的设计经过search()的运行就可以得到插入位置的父节点。或许应该记得BinTree里写过的几个函数insertAsLeft()insertAsRight()我们只需要将val与hot-data做比较即可。在这里我们换一种写法——不浪费search的返回值。你知道查找一旦失败返回值就是NULL的引用利用它就无需在insert()中判断究竟应该插入到hot的左边还是右边。 先找到插入位置X的类型必须是引用后续我们将新节点的指针赋给到Xhot的左右孩子之一就会连上新节点。 BinNodeT * X search(val); 下面这一句话将 “父-子” “子-父” 相互关系都连接好了。 X new BinNode(val, hot); 更新高度的注意事项 更新高度由于之前做的优化检测到某处更新后与更新前高度一致则不会再上行更新所以高度更新要给父节点更新即updateHighAbove(hot)如果给了X更新那就不会继续下去。 插入算法的完整代码 virtual BinNodeT * insert(T const val){BinNodeT * X search(val); //为了找到插入位置if (!X){X new BinNode(val, hot); //这一句话将两个关系连接// 不要忘记BinTreeT::size;updateHighAbove(hot);}return X;}insert()的返回值是X但返回类型是BinNodeT *并不是引用这在语法中是允许的。所返回的东西仅仅在数值上与X相同但与X完全脱离了关系。 删除节点 框架 virtual bool remove(T const val){BinNodeT * X search(val);if (!X) //树里没有val{return false;}else{removeAt(X, hot);BinTreeT::size--;updateHighAbove(hot);return true;}}单分支直接替代 双分支化繁为简 还是想哪一个节点替代被删节点的位置。那一定是直接后继。求中序遍历下的直接后继。 代码 static void removeAt(BinNodeT * X, BinNodeT * hot_node){// hot_node指向要被删除的父亲BinNodeT * del_node; // 实际要被删除的节点BinNodeT * succ_node; // 实际要被删除的节点的接替者if (!X-left){del_node X;succ_node X-right}else if (!X-right){del_node X;succ_node X-left;}else // 双分支情况{ // 找到中序的直接后继del_node succ(X);succ-node del_node-right;swap(del_node-data, X-data);BinNodeT::fromParentTo(del_node) succ;}hot del_node-parent;if (succ_node) succ-parent hot;delete del_node;return succ;}code BST # pragma once# include BinTree.htemplate typename T class BST : public BinTreeT {public:virtual BinNodeT * search(T const val){return searchIn(BinTreeT::root, hot, val);}virtual BinNodeT * insert(T const val){BinNodeT * X search(val); //为了找到插入位置if (!X){X new BinNode(val, hot); //这一句话将两个关系连接// 不要忘记BinTreeT::size;updateHighAbove(hot);}return X;}virtual bool remove(T const val){BinNodeT * X search(val);if (!X) //树里没有val{return false;}else{removeAt(X, hot);BinTreeT::size--;updateHighAbove(hot);return true;}}static void removeAt(BinNodeT * X, BinNodeT * hot_node){// hot_node指向要被删除的父亲BinNodeT * del_node; // 实际要被删除的节点BinNodeT * succ_node; // 实际要被删除的节点的接替者if (!X-left){del_node X;succ_node X-right}else if (!X-right){del_node X;succ_node X-left;}else // 双分支情况{ // 找到中序的直接后继del_node succ(X);succ-node del_node-right;swap(del_node-data, X-data);BinNodeT::fromParentTo(del_node) succ;}hot del_node-parent;if (succ_node) succ-parent hot;delete del_node;return succ;}static BinNodeT * searchIn(BinNodeT * rt, BinNodeT * hot_node, T const val){if (!rt || rt-data val) return rt; // 返回的是引用hot_node rt; //在递归中随深度不断更新if (val rt-data) return searchIn(rt-left, hot_node, val);else return searchIn(rt-right, hot_node, val);}protected:BinNodeT * hot; // 命中节点的父亲};
http://www.w-s-a.com/news/6662/

相关文章:

  • 海南省零售户电商网站官渡区住房和城乡建设局网站
  • 怎么找淘宝客网站最新军事战况
  • 缺乏门户网站建设网页设计与制作项目教程第二版
  • 手机网站横竖屏一般做建设的是什么公司
  • 免费网站建设无广告网站开发 华景新城
  • 湖州网站制作报价西安网站开发有哪些公司
  • google 浏览器开源seo软件
  • 网站空间是什么意思自己怎样建设网站
  • 国外家装设计网站如何做软件开发
  • 凡科建站登录官网当当网网站建设策划书
  • 网站百度屏蔽关键词杭州排名优化公司
  • h5响应式网站模板下载wordpress鼠标指针
  • 摄影作品投稿网站目前最好的引流推广方法
  • 资源站源码永久dede网站搬家 空间转移的方法
  • 网站建设销售的技巧话语it培训机构
  • 自建本地网站服务器wordpress南充房产网最新楼盘最近房价
  • 郑州代做网站天津哪里能做网站
  • 网站如何做排名网站建设项目的工作分解
  • 洛阳网络建站公司网站开发主流语言
  • 广州各区正在进一步优化以下措施seo值是什么意思
  • 滨州建网站公司京东云 wordpress
  • 网站视频背景怎么做免费的网络推广有哪些
  • 申请网站怎样申请广西壮族自治区专升本业务系统
  • 写作网站哪个网站做ic外单好
  • 苏州和城乡建设局网站撸撸撸做最好的导航网站
  • 网站被同行抄袭怎么办深圳中装建设集团
  • 建站及推广瓦房店 网站建设
  • 怎么查网站是在哪里备案的广州电力建设有限公司网站
  • 做网站自己申请域名还是对方wordpress管理地址
  • 专门做二手书网站或appwordpress首页显示特定分类文章