数据结构之红黑树
来源:互联网 发布:nginx 去除版本号 编辑:程序博客网 时间:2024/05/17 06:49
红黑树性质:
1、每个节点不是红的就是黑的2、没有连续的红节点3、根节点为黑色的4、每条路径上黑色节点的数量都相等5、每个叶子节点的空指针域都是黑色的通过以上要求,可以保证最长路径上节点数不超过最短路径节点数的两倍(极限情况下),又因为每插入几个元素,就要调整一次红黑树,则它是一种近似平衡的二叉树
检测红黑树:
检测一棵树是不是红黑树,就要根据它的性质来检测,红黑树种有两条很重要的性质,就是性质三(没有两个连在一起的红色节点)和性质四(每条路上的黑色结点个数相等)。
要判断每条路上的黑色结点个数是否相等,首先就要知道其他路上的个数是多少,那么可以先计算出到达最左结点时,黑色结点的个数,再根据这个值来判断其他路上的值是不是和这个值相等,如果不相等则返回false,否则继续判断。
bool CheckRBTree(Node* root) { Node* pRoot = root; size_t k = 0; if(pRoot == NULL) return true; size_t blackCount = 0; while(pRoot->_Left) { if(pRoot->_color == BLACK) ++blackCount; pRoot = pRoot->_Left; } return _CheckRBTree(root, blackCount, k); } bool _CheckRBTree(Node* pRoot, const size_t blackCount, size_t k) { if(pRoot == NULL) return true; else { Node* pParent = pRoot->_Parent; if(pRoot->_color == RED && pParent->_color == RED) return false; if(pRoot->_color == BLACK) { k++; } if(pRoot->_Left == NULL && pRoot->_Right == NULL) { if(k != blackCount) return false; return true; } } return _CheckRBTree(pRoot->_Left, blackCount, k) && _CheckRBTree(pRoot->_Right, blackCount, k); }
阅读全文
0 0
- 内核数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 【转】数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之(红黑树)
- 数据结构之红黑树
- 数据结构树之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- 数据结构之红黑树
- windows命令行工具cmder
- 操作系统多线程例子--生产者与消费者
- 线程池模拟实现
- linux初学者-普通磁盘分区篇
- 两道最近收到某好公司的笔试题。
- 数据结构之红黑树
- 2017"百度之星"程序设计大赛
- 迅为iTOP4412开发板上如何移植SDIO接口WIFI
- java面试题 :买可乐问题,5个空瓶可换一瓶可乐,问n个人买几瓶?
- python中的列表(List)如何一次删除多个数
- 1002 度度熊的王国战略
- HTML5 SVG API及实例 SVG的特点
- linux初学者-磁盘分区方式篇
- [PAT乙级]1068. 万绿丛中一点红(20)