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

wordpress 会员查看网站seo基础

wordpress 会员查看,网站seo基础,html制作电影网页,天津网站建设技术红黑树(Red - Black Tree) 1.定义 红黑树是一种自平衡的二叉查找树,它在每一个节点上增加另一个存储位来表示节点的颜色,可以是红色或者黑色。通过这些颜色的约束,红黑树能够保证从根到叶子节点的最长路径不会超过最…

红黑树(Red - Black Tree)

1.定义

红黑树是一种自平衡的二叉查找树,它在每一个节点上增加另一个存储位来表示节点的颜色,可以是红色或者黑色。通过这些颜色的约束,红黑树能够保证从根到叶子节点的最长路径不会超过最短路径的两倍,从而保持大致的平衡。

2.性质

1.节点是红色或者黑色。

2.根节点是黑色。

3.叶子节点(空节点)是黑色。

4.如果一个节点是红色,则它的两个子节点都是黑色。(不能有两个连续的红色节点)

5.从任意节点到其每个叶子的所有路径都包含相同数量的黑色节点。

以下是红黑树的简单实现代码(仅包含插入操作):

#include <iostream>
#include<vector>
#include <stdio.h>
#include <stdlib.h>
using namespace std;// 定义节点颜色
typedef enum { RED, BLACK } Color;// 定义红黑树节点
typedef struct RBTreeNode {int key;Color color;struct RBTreeNode* left;struct RBTreeNode* right;struct RBTreeNode* parent;
} RBTreeNode;// 创建新节点
RBTreeNode* createNode(int key) {RBTreeNode* newNode = (RBTreeNode*)malloc(sizeof(RBTreeNode));newNode->key = key;newNode->color = RED; // 新节点默认为红色newNode->left = NULL;newNode->right = NULL;newNode->parent = NULL;return newNode;
}// 左旋操作
void leftRotate(RBTreeNode** root, RBTreeNode* x) {RBTreeNode* y = x->right; // 设置yx->right = y->left; // 转移y的左子树到x的右子树if (y->left != NULL) {y->left->parent = x;}y->parent = x->parent; // 链接x的父节点到yif (x->parent == NULL) {*root = y;}else if (x == x->parent->left) {x->parent->left = y;}else {x->parent->right = y;}y->left = x; // 把x放到y的左子树x->parent = y;
}// 右旋操作
void rightRotate(RBTreeNode** root, RBTreeNode* y) {RBTreeNode* x = y->left; // 设置xy->left = x->right; // 转移x的右子树到y的左子树if (x->right != NULL) {x->right->parent = y;}x->parent = y->parent; // 链接y的父节点到xif (y->parent == NULL) {*root = x;}else if (y == y->parent->right) {y->parent->right = x;}else {y->parent->left = x;}x->right = y; // 把y放到x的右子树y->parent = x;
}// 修复插入操作后的红黑树性质
void fixInsert(RBTreeNode** root, RBTreeNode* newNode) {RBTreeNode* uncle;while (newNode != *root && newNode->parent->color == RED) {if (newNode->parent == newNode->parent->parent->left) {uncle = newNode->parent->parent->right; // 叔叔节点if (uncle != NULL && uncle->color == RED) {// 情况1:叔叔是红色newNode->parent->color = BLACK;uncle->color = BLACK;newNode->parent->parent->color = RED;newNode = newNode->parent->parent;}else {if (newNode == newNode->parent->right) {// 情况2:叔叔是黑色,且新节点是右孩子newNode = newNode->parent;leftRotate(root, newNode);}// 情况3:叔叔是黑色,且新节点是左孩子newNode->parent->color = BLACK;newNode->parent->parent->color = RED;rightRotate(root, newNode->parent->parent);}}else {uncle = newNode->parent->parent->left; // 叔叔节点if (uncle != NULL && uncle->color == RED) {// 情况1:叔叔是红色newNode->parent->color = BLACK;uncle->color = BLACK;newNode->parent->parent->color = RED;newNode = newNode->parent->parent;}else {if (newNode == newNode->parent->left) {// 情况2:叔叔是黑色,且新节点是左孩子newNode = newNode->parent;rightRotate(root, newNode);}// 情况3:叔叔是黑色,且新节点是右孩子newNode->parent->color = BLACK;newNode->parent->parent->color = RED;leftRotate(root, newNode->parent->parent);}}}(*root)->color = BLACK; // 根节点必须是黑色
}// 插入新节点
void insert(RBTreeNode** root, int key) {RBTreeNode* newNode = createNode(key);RBTreeNode* current = *root;RBTreeNode* parent = NULL;// 查找插入位置while (current != NULL) {parent = current;if (newNode->key < current->key) {current = current->left;}else {current = current->right;}}newNode->parent = parent; // 设置父节点if (parent == NULL) {*root = newNode; // 如果树为空,新节点成为根节点}else if (newNode->key < parent->key) {parent->left = newNode; // 插入到父节点的左子树}else {parent->right = newNode; // 插入到父节点的右子树}fixInsert(root, newNode); // 修复红黑树性质
}// 打印红黑树(中序遍历)
void inorderTraversal(RBTreeNode* root) 
{if (root != NULL) {inorderTraversal(root->left);printf("%d(%s) ", root->key, root->color == RED ? "RED" : "BLACK");inorderTraversal(root->right);}
}int main() 
{RBTreeNode* root = NULL;insert(&root, 10);insert(&root, 20);insert(&root, 30);insert(&root, 40);insert(&root, 50);printf("Inorder traversal of the constructed Red - Black Tree is:\n");inorderTraversal(root);printf("\n");return 0;
}

代码运行结果:

微信截图_20250608122112

说明:以上代码来自于Kimi AI助手。

好文链接:

数据结构(8)-- 图解红黑树

【高阶数据结构】红黑树详解

http://www.dtcms.com/wzjs/436535.html

相关文章:

  • 如何做自己的广告网站列举常见的网络营销工具
  • 中山中小企业网站建设百度关键词排行榜
  • 网站右下角图片代码想做网络推广的公司
  • 网站建设中 html模板登录百度账号注册
  • 网络品牌营销案例长沙网站优化价格
  • 徐州做网站的公司招聘营销软文案例
  • 基于MVC网站建设课程设计报告春哥seo博客
  • 网站建设自助建站制作网络舆情的网站
  • 全国信用企业公示平台官网seo的作用是什么
  • 晋江住房和城乡建设局网站营销渠道名词解释
  • 电脑做系统哪个网站比较好网站怎么注册
  • 东莞网站建设公司好营销型网站分析
  • app开发与网站开发软文推广500字
  • wordpress 文章前空格seo的推广技巧
  • 关于征求网站建设的通知网站空间
  • 自己动手制作网站腾讯广告代理
  • 大学里读网站建设自己做网站
  • 凡客网站建设东莞搜索引擎推广
  • 徐州优化网站外包网站有哪些
  • 石家庄 外贸网站建设百度手机卫士
  • 网站的前台和后台百度爱采购官方网站
  • 做电影网站失败河南品牌网络推广外包
  • 360检测网站开发语言的工具自己的品牌怎么做加盟推广
  • 株洲网站建设百度广告语
  • 自己有网站怎么做竞价百度最新版下载
  • 营销型网站报价免费数据统计网站
  • 西安网站开发外包免费培训课程
  • 大学生创业网站建设方案优化大师官网登录入口
  • 直销网站建设云优化
  • 上海建企业网站免费推广网站2024