红黑树 实现 研究
来源:互联网 发布:中国移动手机oa软件 编辑:程序博客网 时间:2024/05/16 10:34
看了 程序抽象思想 里面写了部分代码,但是想把它补全,表示很蛋疼!
有问题:
#include "stdio.h"#include <string>struct nodeT{ nodeT() : pLeft(NULL) , pRight(NULL) , bf(0) { } std::string key; nodeT* pLeft; nodeT* pRight; int bf;};void RotateLeft(nodeT*& pTree){ nodeT* pParent = pTree; nodeT* pClild = pParent->pRight; pParent->pRight = pClild->pLeft; pClild->pLeft = pParent; pTree = pClild;}void RotateRight(nodeT*& pTree){ nodeT* pParent = pTree; nodeT* pClild = pParent->pLeft; pParent->pLeft = pClild->pRight; pClild->pRight = pParent; pTree = pClild;}void FixLeftBalance(nodeT* pTree){ nodeT* pParent = pTree; nodeT* cptr = pParent->pLeft; nodeT* pChind = cptr; int oldBf = 0; if (pChind->bf != pParent->bf) { oldBf = pChind->pRight->bf; RotateLeft(cptr); RotateRight(pTree); nodeT* t = pTree; t->bf = 0; switch(oldBf) { case -1: { t->pLeft->bf = 0; t->pRight->bf = 1; break; } case 1: { t->pLeft->bf = -1; t->pRight->bf = 0; break; } case 0: { t->pLeft->bf= 0; t->pRight->bf = 0; break; } } } else { RotateRight(pTree); nodeT* t = pTree; t->pRight->bf = 0; t->bf = 0; }}void FixRightBalance(nodeT*& pTree){ nodeT* pParent = pTree; nodeT* cptr = pParent->pRight; nodeT* pChind = cptr; int oldBf = 0; if (pChind->bf != pParent->bf) { oldBf = pChind->pLeft->bf; RotateRight(cptr); RotateLeft(pTree); nodeT* t = pTree; t->bf = 0; switch(oldBf) { case -1: { t->pRight->bf = 0; t->pLeft->bf = 1; break; } case 1: { t->pRight->bf = -1; t->pLeft->bf = 0; break; } case 0: { t->pRight->bf= 0; t->pLeft->bf = 0; break; } } } else { RotateLeft(pTree); nodeT* t = pTree; t->pLeft->bf = 0; t->bf = 0; }}int InsertNode(nodeT*& pTree, std::string key){ if (NULL == pTree) { pTree = new nodeT; pTree->key = key; return 1; } int sign = key.compare(pTree->key); if (0 == sign) { return 0; } int delta = 0; if (sign < 0) { delta = InsertNode(pTree->pLeft,key); if (0 == delta) { return 0; } switch(pTree->bf) { case 1: { pTree->bf = 0; return 0; } case 0: { pTree->bf = -1; return 1; } case -1: { FixLeftBalance(pTree); return 0; } } } else { delta = InsertNode(pTree->pRight,key); if (0 == delta) { return 0; } switch(pTree->bf) { case -1: { pTree->bf = 0; return 0; } case 0: { pTree->bf = 1; return 1; } case 1: { FixRightBalance(pTree); return 0; } } }}void PrintfTree(nodeT* pTree){ if (NULL != pTree) { PrintfTree(pTree->pLeft); printf("%s ", pTree->key.c_str()); PrintfTree(pTree->pRight); }}int main(){ nodeT* pTree = NULL; InsertNode(pTree, "1"); InsertNode(pTree, "2"); InsertNode(pTree, "111"); InsertNode(pTree, "3"); InsertNode(pTree, "4"); InsertNode(pTree, "5"); InsertNode(pTree, "-1"); PrintfTree(pTree);}
- 红黑树 实现 研究
- 红黑树(红黑树研究记录-代码实现)
- PicoContainer实现研究《待续》
- SyncML Client实现研究
- TC研究与实现
- timeout机制实现研究
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- JDK源代码研究 TreeSet TreeMap 红黑树算法实现
- at91sam9XXX的Linux驱动开发记录——暂定更新
- 构架师的职责
- [Android实例] 收藏的Android非常好用的组件或者框架
- 单例
- Oracle10g DBCONSOLE 服务无法启动的解决方法
- 红黑树 实现 研究
- Install Android Composite ADB Interface driver for Windows 7 and Ubuntu Linux
- 用VB模拟带有修饰键的组合键
- AE+C#通过多线程向GlobeControl中增加图层
- vim 改变窗口的大小
- 《运算放大器权威指南》读书笔记(二)
- levelDB—整体架构介绍
- XMPP学习记录四:关于接受,发送消息和获取好友上下线的状态
- tomcat iis下公用80端口 只需输入域名即可访问不同项目;适用于iis服务器下部署多个项目