news 2026/5/5 6:32:43

27.红黑树(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
27.红黑树(上)

从根节点走到空算一条路径,这个有9条路径。最短最长不一定存在。

插入相同节点,avl高度更低,左右很均衡,红黑树不那么均衡,但效率不差,最短路径把他切开,就是满二叉树

avl树比红黑树更接近logN,红黑树比logN多一点,CPU很快没什么差别

h不为0,旋转加变色

变色+继续往上处理,变色要让这棵树之前是一个节点现在还是一个节点,向上处理就是爷爷节点变成红的红的,如果父亲也是红的,连续的红节点,继续处理。

#pragma once enum Colour { RED, BLACK }; template<class K, class V> struct RBTreeNode { // 这里更新控制平衡也要加入parent指针 pair<K, V> _kv; RBTreeNode<K, V>* _left; RBTreeNode<K, V>* _right; RBTreeNode<K, V>* _parent; Colour _col; RBTreeNode(const pair<K, V>& kv) :_kv(kv) , _left(nullptr) , _right(nullptr) , _parent(nullptr) {} }; template<class K, class V> class RBTree { typedef RBTreeNode<K, V> Node; public: bool Insert(const pair<K, V>& kv) { if (_root == nullptr) { _root = new Node(kv); _root->_col = BLACK; 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); cur->_col = RED; if (parent->_kv.first < kv.first) { parent->_right = cur; } else { parent->_left = cur; } // 链接父亲 cur->_parent = parent; // 父亲是红色,出现连续的红色节点,需要处理 while (parent && parent->_col == RED) { Node* grandfather = parent->_parent; if (parent == grandfather->_left) { // g // p u Node* uncle = grandfather->_right; if (uncle && uncle->_col == RED) { // 变色 parent->_col = uncle->_col = BLACK; grandfather->_col = RED; // 继续往上处理 cur = grandfather; parent = cur->_parent; } } else { // g // u p Node* uncle = grandfather->_left; // 叔叔存在且为红,-》变色即可 } } _root->_col = BLACK; return true; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 0:24:26

31、Python GUI 开发:从基础到应用

Python GUI 开发:从基础到应用 在软件开发中,Python 凭借其简洁的语法和丰富的库,在处理各种任务时表现出色,尤其是在进程处理和 GUI 应用开发方面。下面我们将深入探讨 Python 在这些领域的应用。 进程处理与 Python Python 在处理进程方面展现出了成熟和强大的特性。它…

作者头像 李华
网站建设 2026/5/3 6:15:46

12、树莓派的多样玩法:从I2C配置到家庭共享与安卓运行

树莓派的多样玩法:从I2C配置到家庭共享与安卓运行 一、I2C支持配置 在使用树莓派时,不同的系统版本对于I2C支持的配置有所不同。 - 特定系统无需额外配置 :如果你运行的是Pidora或Occidentalis且没有使用自定义内核,那么系统已经预先配置好了所需的一切,无需进行额外…

作者头像 李华
网站建设 2026/4/30 23:11:35

7步构建企业级AI助手:从单机到分布式完整指南

7步构建企业级AI助手&#xff1a;从单机到分布式完整指南 【免费下载链接】tabby tabby - 一个自托管的 AI 编程助手&#xff0c;提供给开发者一个开源的、本地运行的 GitHub Copilot 替代方案。 项目地址: https://gitcode.com/GitHub_Trending/tab/tabby 构建企业级AI…

作者头像 李华
网站建设 2026/5/4 15:30:15

Trae Agent离线工作完整教程:无网络环境下的终极解决方案

文章概要 【免费下载链接】trae-agent Trae 代理是一个基于大型语言模型&#xff08;LLM&#xff09;的通用软件开发任务代理。它提供了一个强大的命令行界面&#xff08;CLI&#xff09;&#xff0c;能够理解自然语言指令&#xff0c;并使用各种工具和LLM提供者执行复杂的软件…

作者头像 李华
网站建设 2026/4/30 23:11:43

CAXA 工艺图表 2025:动态表格与参数化工序简图功能详解安装教程

简介 CAXA 工艺图表 2025 是数码大方推出的CAD/CAPP 一体化工艺编制软件&#xff0c;全面整合 CAXA CAD 电子图板 2025 的功能模块&#xff0c;针对航空、汽车零部件等行业的复杂工艺场景完成定制化升级&#xff0c;实现工艺编制效率、数据处理精准度与行业适配性的三重提升。…

作者头像 李华
网站建设 2026/5/2 6:24:26

1、开启 NCurses 编程之旅:基础设置与入门指南

开启 NCurses 编程之旅:基础设置与入门指南 1. 了解 NCurses 与系统要求 NCurses 是一个强大的编程库,可用于在 UNIX 发行版以及 Windows 的 CYGWIN 环境中对终端屏幕上的文本进行编程、控制和操作。借助它,你能够控制交互式输入输出,将信息组织成屏幕上的窗口,使用颜色…

作者头像 李华