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

网站制作排行榜数字营销案例

网站制作排行榜,数字营销案例,自己做头像的网站漫画,东莞快速网站制作哪家强目录 一.搜索二叉树的特性与实现1.特点2.实现二.搜索二叉树的性能 一.搜索二叉树的特性与实现 1.特点 二叉搜索树是特殊的二叉树,它有着更严格的数据结构特点: (1)非空左子树的所有键值小于其根结点的键值。 (2&…

在这里插入图片描述

目录

  • 一.搜索二叉树的特性与实现
    • 1.特点
    • 2.实现
    • 二.搜索二叉树的性能

一.搜索二叉树的特性与实现

1.特点

二叉搜索树是特殊的二叉树,它有着更严格的数据结构特点:
(1)非空左子树的所有键值小于其根结点的键值。
(2)非空右子树的所有键值大于其根结点的键值。
(3)左、右子树都是二叉搜索树
如下图所示就是一株典型的搜索二叉树:
在这里插入图片描述
这种结构中序遍历的结果是升序的,以上特性可以帮助我们解决很多问题。例如查找

2.实现

搜索二叉树的查找功能逻辑较简单,根据要查找的值依次与当前节点键值比较,如果小于就在左树继续寻找反之在右树查找

	bool find(const T& key){Node* cur = _root;while (cur){if (cur->_key > key){cur = cur->left;}else if (cur->_key < key){cur = cur->right;}else{return true;}}return false;}

插入功能首先要查找到要插入的值应该放的地方,接着判断自己是父节点的左树还有右树然后进行插入,当查找到与要插入的值相同的键值时,插入失败,因为搜索二叉树不允许有相同的值存在,需要注意的是当此树为空树时,直接插入值即可:

bool Insert(const T& key){if (_root == nullptr){_root = new Node(key);return true;}Node* cur = _root;Node* parents = nullptr;while (cur){if (cur->_key < key){parents = cur;cur = cur->right;}else if (cur->_key > key){parents = cur;cur = cur->left;}else{return false;}}cur = new Node(key);if (parents->_key > key ){parents->left = cur;}else{parents->right = cur;}return true;}

需要重点理解是接下来的删除功能:要删除某个键值 首先需要找到这个结点,大体逻辑与find功能相似,不同的是在找到时如何删除这个结点。这时候分为三种情况:结点左子树为空/结点右子树为空/左右子树都不为空。左或右子树为空时逻辑较简单使用托孤法即可首先判断是否为根节点如果是则直接将根节点赋值为根节点的右或左结点接着判断自己是父节点的左/右结点,接着让父节点的左/右直接指向我的左或右结点。 当左右子树都不为空时需要使用到替换法,将要删除的结点与左子树的最大结点的键值或者右子树的最小节点的键值替换(因为要保证搜索二叉树的特性),之后删除即可。

bool Erase(const T& key){Node* cur = _root;Node* parents = nullptr;if (cur == nullptr)return false;while (cur){if (cur->_key > key){parents = cur;cur = cur->left;}else if (cur->_key < key){parents = cur;cur = cur->right;}else{if (cur->left == nullptr){	if (cur == _root){_root = cur->right;}else{if (parents->left == cur){parents->left = cur->right;}else{parents->right = cur->right;}}}else if (cur->right == nullptr){if (cur == _root){_root = cur->left;}else{if (parents->left == cur){parents->left = cur->left;}else{parents->right = cur->left;}}}else//左子树和右子树都不为空{Node* parents = cur;Node* leftmax = cur->left;while (leftmax->right){parents = leftmax;leftmax = leftmax->right;}swap(cur->_key, leftmax->_key);if (parents->left == leftmax){parents->left = leftmax->left;}else{parents->right = leftmax->left;}cur = leftmax;}delete cur;return true;}}return false;}

以上讲解的是非递归版的实现,递归版的查找 插入 删除代码更为简洁,但是更难理解。
因为在类外调用成员函数无法向函数传参成员变量,所以在类中进行一些封装

public:bool findR(const T& key){return _findR(_root, key);}private:bool _findR(Node* root, const T& key){if (root == nullptr){return false;}if (root->_key > key){return _findR(root->left, key);}else if (root->_key < key){return _findR(root->right.key);}else{return true;}}

查找与删除功能同样使用了封装:

public:bool InsertR(const T& key){return _InsertR(_root, key);}bool EraseR(const T& key){return _EraseR(_root, key);}private:bool _EraseR(Node*& root, const T& key){if (root == nullptr){return false;}if (root->_key > key){return _EraseR(root->left, key);}else if (root->_key < key){return _EraseR(root->right,key);}else{Node* del = root;if (root->left == nullptr){root = root->right;}else if (root->right == nullptr){root = root->left;}else{Node* leftMax = root->left;while (leftMax->right){leftMax = leftMax->right;}swap(root->_key, leftMax->_key);return _EraseR(root->left, key);}delete del;return true;}}bool _InsertR(Node*& root, const T& key){if (root == nullptr){root = new Node(key);//神之一手return true;}if (root->_key > key){return _InsertR(root->left, key);}else if (root->_key < key){return _InsertR(root->right.key);}else{return false;}}

二.搜索二叉树的性能

查找的性能在搜索二叉树为完全二叉树或者满二叉树或者接近时,时间复杂度是logN,
在这里插入图片描述
在极端情况下,时间复杂度平均为N/2.

http://www.yidumall.com/news/77738.html

相关文章:

  • 网站建设的基本流程是怎样的站长工具之家seo查询
  • 门户网站的建设成果做推广的技巧
  • 顺德手机网站设计价位在哪里可以发布自己的广告
  • 利辛网站建设广州推广工具
  • 网站开发技术框架南昌seo专业团队
  • 网站建设群阿里巴巴运营
  • 大唐工作室 网站制作软文什么意思范例
  • 南昌网站建设方案优化长沙百度百科
  • 品牌网站建设内容框架搜索引擎优化seo网站
  • 怎么做网页的搜索功能南宁seo推广外包
  • 手机网站建设商场常州seo
  • 游戏策划青岛的seo服务公司
  • 嘉兴网站设计999 999河南郑州最新事件
  • 衢州网站设计广州网站优化推广
  • 怎样做外贸网站推广厦门seo测试
  • 公司用wordpressseo点击工具帮你火21星热情
  • 公司做网站的 oa办公系统软文平台发布
  • 做网站建网站网址安全中心检测
  • 网站建设实训建议小广告网站
  • 长春网站只长春网站制作做种子搜索神器在线搜
  • 星月教你做网站的文档女生学市场营销好吗
  • 创业平台app有哪些seo助手
  • 长兴企业网站开发杭州最专业的seo公司
  • 中国疫情为何突然严重了长沙网站优化指导
  • 商务网站设计方案最新病毒感染
  • 用discuz做网站北京厦门网站优化
  • 网站卡片设计百度高级搜索页面的网址
  • 做网站维护需要多少钱长沙官网seo技巧
  • 营销型网站制作哪家好百度账号登录入口网页版
  • 政府网站集约化建设思路研究seo与网络推广的区别和联系