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

做网站需要看的书wordpress 邮箱订阅

做网站需要看的书,wordpress 邮箱订阅,网络广告文案案例,水利建设经济定额站网站文章目录 AVL树AVL树的规则或原理 AVL树的实现1.节点的定义2.功能和接口等的实现默认构造函数#xff0c;析构函数拷贝构造函数插入搜索打印函数检查是否为平衡树#xff0c;检查平衡因子旋转 AVL树 AVL树#xff0c;全称Adelson-Velsky和Landis树#xff0c;是一种自平衡… 文章目录 AVL树AVL树的规则或原理 AVL树的实现1.节点的定义2.功能和接口等的实现默认构造函数析构函数拷贝构造函数插入搜索打印函数检查是否为平衡树检查平衡因子旋转 AVL树 AVL树全称Adelson-Velsky和Landis树是一种自平衡的二叉搜索树。它于1962年由苏联科学家Adelson-Velsky和Landis首次提出。AVL树具有以下特点树中任一节点的左右子树高度差不超过1因此AVL树是一种严格平衡的二叉搜索树。在AVL树上进行查找、插入和删除操作的时间复杂度均为O(log n)大大提高了搜索效率。 AVL树的规则或原理 当向二叉搜索树中插入新结点后如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整)即可降低树的高度从而减少平均搜索长度。 一棵AVL树或者是空树或者是具有以下性质的二叉搜索树 它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1) 如果一棵二叉搜索树是高度平衡的它就是AVL树。如果它有n个结点其高度可保持在 O ( l o g 2 n ) O(log_2 n) O(log2​n)搜索时间复杂度O( l o g 2 n log_2 n log2​n)。 AVL树的实现 1.节点的定义 首先我们定义AVL树的节点结构 templateclass K, class V struct AVLTreeNode {pairK, V _kv;//值 AVLTreeNodeK, V* _left;//该节点的左孩子AVLTreeNodeK, V* _right;//该节点的右孩子AVLTreeNodeK, V* _parent;//该节点的父节点int _bf; // balance factor平衡因子AVLTreeNode(const pairK, V kv):_kv(kv), _left(nullptr), _right(nullptr), _parent(nullptr), _bf(0){} };2.功能和接口等的实现 默认构造函数析构函数 templateclass K, class V class AVLTree {typedef AVLTreeNodeK, V Node; public://默认构造函数用来初始化AVL树将根节点置空来表示树是空的AVLTree() default;//析构函数~AVLTree(){Destroy(_root);_root nullptr;} private:void Destroy(Node* root){if (root nullptr)return;Destroy(root-_left);Destroy(root-_right);delete root;} private:Node* _root nullptr; };拷贝构造函数 templateclass K, class V class AVLTree {//拷贝构造AVLTree(const AVLTreeK, V t){_root Copy(t._root);}private://用递归来进行赋值AVL树的节点Node* Copy(Node* root){if (root nullptr)return nullptr;Node* newRoot new Node(root-_key, root-_value);newRoot-_left Copy(root-_left);newRoot-_right Copy(root-_right);return newRoot;}private:Node* _root nullptr; };插入 templateclass K, class V class AVLTree { private:bool Insert(const pairK, V kv){if (_root nullptr){_root new Node(kv);return true;}Node* parent nullptr;Node* cur _root;while (cur){if (cur-_kv.first kv.first){parent cur;cur cur-_right;}else if (cur-_kv.first kv.first){parent cur;cur cur-_left;}else{return false;}}cur new Node(kv);if (parent-_kv.first kv.first){parent-_right cur;}else{parent-_left cur;}cur-_parent parent;// 更新平衡因子while (parent){if (cur parent-_left)parent-_bf--;elseparent-_bf;if (parent-_bf 0){break;}else if (parent-_bf 1 || parent-_bf -1){// 继续往上更新cur parent;parent parent-_parent;}else if (parent-_bf 2 || parent-_bf -2){// 不平衡了旋转处理if (parent-_bf 2 cur-_bf 1){RotateL(parent);}else if (parent-_bf -2 cur-_bf -1){RotateR(parent);}else if (parent-_bf 2 cur-_bf -1){RotateRL(parent);}else{RotateLR(parent);}break;}else{assert(false);}}return true;}private:Node* _root nullptr; };搜索 templateclass K, class V class AVLTree { private:Node* 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 cur;}}return nullptr;}private:Node* _root nullptr; };打印函数 templateclass K, class V class AVLTree {void InOrder(){_InOrder(_root);cout endl;} private:void _InOrder(Node* root){if (root nullptr){return;}_InOrder(root-_left);cout root-_kv.first : root-_kv.second endl;_InOrder(root-_right);} private:Node* _root nullptr; };检查是否为平衡树检查平衡因子 templateclass K, class V class AVLTree { bool IsBanlanceTree(){return _IsBanlanceTree(_root);} private://计算平衡因子函数int _Height(Node* root){if (root nullptr){return 0;}int leftHeight _Height(root-_left);int rightHeight _Height(root-_right);return leftHeight rightHeight ? leftHeight 1 : rightHeight 1;}//判断是否为平衡树的函数bool _IsBanlanceTree(Node* root){//空树返回真if (nullptr root){return true;}//计算root的平衡因子即root左右子树高度差int leftHeight _Height(root-_left);int rightHeight _Height(root-_right);int diff rightHeight - leftHeight;//如果计算出的平衡因子与root的平衡因子不相等//或root平衡因子的绝对值超过一则不是AVL树/*if (abs(diff) 2 || root-_bf ! diff){return false;}*/if (abs(diff) 2){cout root-_kv.first 高度差异常 endl;return false;}if (root-_bf ! diff){cout root-_kv.first 平衡因子异常 endl;return false;}//root的左右都是AVL树那么概述一定是AVL树return _IsBanlanceTree(root-_left) _IsBanlanceTree(root-_right);} private:Node* _root nullptr; };旋转 templateclass K, class V class AVLTree {void RotateL(Node* parent){Node* subR parent-_right;Node* subRL subR-_left;parent-_right subRL;if (subRL)subRL-_parent parent;Node* parentParent parent-_parent;csubR-_left parent;parent-_parent subR;if (parentParent nullptr){_root subR;subR-_parent nullptr;}else{if (parent parentParent-_left){parentParent-_left subR;}else{parentParent-_right subR;}subR-_parent parentParent;}parent-_bf subR-_bf 0;}void RotateR(Node* parent){Node* subL parent-_left;Node* subLR subL-_right;parent-_left subLR;if (subLR)subLR-_parent parent;Node* parentParent parent-_parent;subL-_right parent;parent-_parent subL;if (parentParent nullptr){_root subL;subL-_parent nullptr;}else{if (parent parentParent-_left){parentParent-_left subL;}else{parentParent-_right subL;}subL-_parent parentParent;}parent-_bf subL-_bf 0;}void RotateRL(Node* parent){Node* subR parent-_right;Node* subRL subR-_left;int bf subRL-_bf;RotateR(parent-_right);RotateL(parent);if (bf 0){subR-_bf 0;subRL-_bf 0;parent-_bf 0;}else if (bf 1){subR-_bf 0;subRL-_bf 0;parent-_bf -1;}else if (bf -1){subR-_bf 1;subRL-_bf 0;parent-_bf 0;}else{assert(false);}}void RotateLR(Node* parent){Node* subL parent-_left;Node* subLR subL-_right;int bf subLR-_bf;RotateL(parent-_left);RotateR(parent);if (bf 0){subL-_bf 0;subLR-_bf 0;parent-_bf 0;}else if (bf -1){subL-_bf 0;subLR-_bf 0;parent-_bf 1;}} private:Node* _root nullptr; };
http://www.hkea.cn/news/14285686/

相关文章:

  • 公司创建网站多少钱嘉兴制作网站机构
  • 做网站王仁杰企业做网站推广
  • 济南网站制作哪家强最近出入上海最新规定
  • 网站收录提交入口官网好的php网站
  • 比较好的网站建设网站产品设计创意图片
  • 做链接的网站做一个网站要多少钱
  • 贵州建站管理系统博客类网站源码
  • 做影视网站侵权不南京网站高端
  • 重庆建设网站首页设计师应该知道的网站
  • 站长工具域名查询ip志愿者网站建设
  • 仙桃做网站的个人做外贸常用那几个网站
  • 张家港做网站收费标准seo排名赚能赚钱吗
  • 酒泉建设局造价官网站公司宣传片如何制作
  • 宜昌怎样优化网站建设免费wordpress资源
  • 如何上传文件到自己的网站网站更新文章首页不显示
  • 智能家居型网站开发广州市番禺区住房和建设局网站
  • 西安做网站首选白山镇seo快速排名
  • 上海企业网站建设报手机设置管理网站首页
  • 百度不收录哪些网站吗平台搭建与拆除流程
  • 广州网站建设+美词现在有专业做海鲜的网站没有
  • 淘客导购网站怎么做网站域名301设置
  • 网络公司网站源码写作网站有哪些
  • 电子商务网站系统建设实训心得小程序营销策划方案
  • 网站上传的图片怎么做的清晰东莞市建设
  • 网站建设与管理岗位国内做网站公司排名
  • 安徽省建设厅网站官网信息发布网站开发模板
  • 正在建设中的网站可算违规表白网页制作免费网站
  • 红色大气网站互联网网站制作公司哪家好
  • 宣讲家网站两学一做心得wordpress下雪
  • 统计局网站建设情况免费咨询男性问题