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

大连网站排名优化价格浙江杭州下沙做网站

大连网站排名优化价格,浙江杭州下沙做网站,网站建设工作室介绍范文,商城平台开发公司文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树#xff08;Red-Black Tree#xff09;是一种自平衡的二叉查找树#xff08;Binary Search Tree, BST#xff09;… 文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树Red-Black Tree是一种自平衡的二叉查找树Binary Search Tree, BST它在普通二叉查找树的基础上增加了一些额外的约束条件以确保树的平衡性从而保证在最坏情况下插入、删除和查找操作的时间复杂度为 O(logn)。 红黑树的五个基本性质 红黑树是一种特殊的二叉查找树它满足以下五个基本性质 1.节点是红色或黑色每个节点都有一个颜色属性红色或黑色。 2.根节点必须是黑色 3.叶子节点即空节点或 null是黑色。 4.如果一个节点是红色则它的两个子节点都是黑色。换句话说红色节点不能连续出现。 5.从任意节点到其每个叶子节点的所有路径上黑色节点的数量相同。这一性质确保了树的平衡性。 红黑树的平衡原理 红黑树通过上述性质来保证树的平衡。虽然红黑树不是完全平衡的二叉树但它能够保证最长路径和最短路径的长度不会相差太大。具体来说红黑树的最长路径不会超过最短路径的两倍从而保证了树的近似平衡。 红黑树的操作 红黑树的主要操作包括插入、删除和查找。这些操作在普通二叉查找树的基础上增加了颜色调整和旋转操作以确保树的平衡。 红黑树的操作 红黑树的主要操作包括插入、删除和查找。这些操作在普通二叉查找树的基础上增加了颜色调整和旋转操作以确保树的平衡。 插入操作 插入新节点将新节点插入到树中新节点默认为红色。 修复树的性质插入后可能违反红黑树的性质需要通过以下操作修复 颜色翻转改变节点的颜色。 旋转操作包括左旋和右旋调整树的结构。 删除操作 删除节点删除目标节点。 修复树的性质删除后可能违反红黑树的性质需要通过以下操作修复 颜色调整改变节点的颜色。 旋转操作调整树的结构。 查找操作 查找操作与普通二叉查找树相同从根节点开始根据键值的大小关系逐层向下查找直到找到目标节点或到达叶子节点。 代码实现 节点实现 class NodeK extends ComparableK, V {K key;V value;NodeK, V left, right, parent;boolean color; // true 表示红色false 表示黑色public Node(K key, V value) {this.key key;this.value value;this.color true; // 新节点默认为红色} }插入和查询操作 public class RedBlackTreeK extends ComparableK, V {private NodeK, V root;// 插入操作public void insert(K key, V value) {root insert(root, key, value);root.color false; // 根节点必须是黑色}private NodeK, V insert(NodeK, V node, K key, V value) {if (node null) {return new Node(key, value);}if (key.compareTo(node.key) 0) {node.left insert(node.left, key, value);node.left.parent node;} else if (key.compareTo(node.key) 0) {node.right insert(node.right, key, value);node.right.parent node;} else {node.value value; // 如果键已存在更新值}// 修复红黑树性质return fixAfterInsertion(node);}// 修复插入后的红黑树性质private NodeK, V fixAfterInsertion(NodeK, V node) {while (node ! null node ! root node.parent.color) {if (node.parent node.parent.parent.left) {NodeK, V uncle node.parent.parent.right;if (uncle ! null uncle.color) {// 情况1叔叔节点是红色node.parent.color false;uncle.color false;node.parent.parent.color true;node node.parent.parent;} else {if (node node.parent.right) {// 情况2右倾先左旋node node.parent;rotateLeft(node);}// 情况3左倾右旋node.parent.color false;node.parent.parent.color true;rotateRight(node.parent.parent);}} else {NodeK, V uncle node.parent.parent.left;if (uncle ! null uncle.color) {// 情况1叔叔节点是红色node.parent.color false;uncle.color false;node.parent.parent.color true;node node.parent.parent;} else {if (node node.parent.left) {// 情况2左倾先右旋node node.parent;rotateRight(node);}// 情况3右倾左旋node.parent.color false;node.parent.parent.color true;rotateLeft(node.parent.parent);}}}return node;}// 左旋操作private void rotateLeft(NodeK, V x) {NodeK, V y x.right;x.right y.left;if (y.left ! null) {y.left.parent x;}y.parent x.parent;if (x.parent null) {root y;} else if (x x.parent.left) {x.parent.left y;} else {x.parent.right y;}y.left x;x.parent y;}// 右旋操作private void rotateRight(NodeK, V x) {NodeK, V y x.left;x.left y.right;if (y.right ! null) {y.right.parent x;}y.parent x.parent;if (x.parent null) {root y;} else if (x x.parent.right) {x.parent.right y;} else {x.parent.left y;}y.right x;x.parent y;}// 查找操作public V get(K key) {NodeK, V node root;while (node ! null) {int cmp key.compareTo(node.key);if (cmp 0) {node node.left;} else if (cmp 0) {node node.right;} else {return node.value;}}return null;} }代码说明 节点定义 每个节点包含键、值、左右子节点和父节点指针以及一个颜色属性红色或黑色。 插入操作 插入新节点时新节点默认为红色。 插入后调用 fixAfterInsertion 方法修复红黑树的性质。 修复逻辑 根据红黑树的性质修复插入操作可能破坏的平衡。 主要处理以下几种情况 叔叔节点是红色将父节点和叔叔节点改为黑色祖父节点改为红色继续向上检查。 叔叔节点是黑色根据节点的位置进行旋转操作调整树的结构。 旋转操作 左旋将右子节点提升为新的根节点调整子树的连接关系。 右旋将左子节点提升为新的根节点调整子树的连接关系。 查找操作 从根节点开始根据键值的大小关系逐层向下查找直到找到目标节点或到达叶子节点。
http://www.w-s-a.com/news/968284/

相关文章:

  • 免费的网站加速器注册公司邮箱
  • 千助网站建设网站整站程序
  • 自学建网站做网站优化访问网站出现目录
  • 济南网站建设是什么百度官网登录入口手机版
  • net快速建站西宁手机网站建设
  • 网站浏览器不兼容怎么办软件系统开发大概多少钱
  • 网站建设哪个公司最好shift wordpress
  • 公司网站建设功能介绍室内设计学习
  • 做网站策划容易遇到哪些问题沈阳公司网站制作
  • 做php网站都用框架吗网站备案当面核验拍摄照片
  • 泉州企业自助建站兰州最好的互联网公司
  • 监察部门网站建设方案网站seo技术教程
  • 个人网站制作源代码下载品牌建设部
  • 网站备案需要准备什么文创产品设计思路
  • 网站开发书籍推荐青岛城阳新闻最新消息
  • 秦皇岛网站建设服务聊城做网站的公司资讯
  • 30岁转行做网站设计丰涵网站建设
  • 山东省和住房建设厅网站首页开发商不按时交房可以退房吗
  • asp网站怎么做404页面跳转本地南通网站建设
  • 点击网站出现微信二维码的链接怎么做申请网站空间怎么做
  • 网站开发的论文题目广告设计排行榜
  • 网络营销网站 功能南京h5制作公司
  • 做网站的费用的会计分录合肥做网站推广哪家好
  • 电子商城网站开发怎么wordpress用的什么主题
  • 榆林电商网站建设网上做试卷的网站
  • 文山网站建设代理中公教育培训机构官网
  • 郑州it培训机构有哪些上海外贸网站seo
  • dw做网站的实用特效广东住房与城乡建设厅网站
  • 模板网站 动易哪方面的网站
  • 怎么给网站做外链邵连虎郑州做网页的公司