2026/4/14 17:07:37
网站建设
项目流程
旅游网站开发的需求分析,淘宝佣金推广网站建设,贵州交通建设集团网站,专业网站建设找哪家从根节点走到空算一条路径#xff0c;这个有9条路径。最短最长不一定存在。插入相同节点#xff0c;avl高度更低#xff0c;左右很均衡#xff0c;红黑树不那么均衡#xff0c;但效率不差#xff0c;最短路径把他切开#xff0c;就是满二叉树avl树比红黑树更接近logN这个有9条路径。最短最长不一定存在。插入相同节点avl高度更低左右很均衡红黑树不那么均衡但效率不差最短路径把他切开就是满二叉树avl树比红黑树更接近logN红黑树比logN多一点CPU很快没什么差别h不为0旋转加变色变色继续往上处理变色要让这棵树之前是一个节点现在还是一个节点向上处理就是爷爷节点变成红的红的如果父亲也是红的连续的红节点继续处理。#pragma once enum Colour { RED, BLACK }; templateclass K, class V struct RBTreeNode { // 这里更新控制平衡也要加入parent指针 pairK, V _kv; RBTreeNodeK, V* _left; RBTreeNodeK, V* _right; RBTreeNodeK, V* _parent; Colour _col; RBTreeNode(const pairK, V kv) :_kv(kv) , _left(nullptr) , _right(nullptr) , _parent(nullptr) {} }; templateclass K, class V class RBTree { typedef RBTreeNodeK, V Node; public: bool Insert(const pairK, 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; }