关于实现红黑树的一些总结

https://github.com/rsy56640/rsy_little_lib/tree/master/library_for_algorithm/RB_Tree

一开始是打算照着 STL 写的,结果发现一个尴尬的情况:
没有allocator,std_config.h,iterator,所以这个 RBTREE1 就搁置了。

后来 开始搞 RBTREE2 ,又碰到了一个很麻烦的问题。
STL 源码里面有一个实现技巧:
红黑树结点的结构是这样的,
关于实现红黑树的一些总结
还有一个 template struct node 继承了node_base,
内部含有 _Ty 类型的一笔数据。
在进行结点的操作和红黑树性质的恢复时 将结点看作是base_ptr,这样做省去了模板,非常方便,要用 value 的时候再 static_cast 回来。
但是,我在写结点的时候将其置入了智能指针,
然而在实现类内必须含有一个 root 结点,因此必须为 带值结点,对它和 base_ptr 操作额度时候会引发大量的问题。
后来找了一些玩意比如:std::static_pointer_cast,都还是没有用。也就是说很难把 root 看作是base_ptr 来用。
之后又做了点愚蠢的事情:
实现类内加了一个 base_ptr& 用来装载root 的基类部分。但是最后发现那是一个 dangling handlers,又以失败而告终。
综上导致了 RBTREE2 的流产。
走投无路之下只能将所有类型划归统一,为了保留 RBTREE2 ,我新开了 RBTREE3。将所有结点操作统一类型有一个问题:要求这个 NIL 必须有一个值,
于是要求 _Ty 类型存在 默认构造函数,真心感觉这非常糟糕。