0001 template <typename T, bool H = true> //H:是否按BST规则更新高度 0002 class BST : public BinTree<T> { //由BinTree派生BST模板类 0003 protected: 0004 BNP<T> _x, _p, _r; //记忆内部操作的三个位置:查找的终点与其父亲,以及删除之后的替代者 0005 BNP<T> connect342(BNP<T>, BNP<T>, BNP<T>, BNP<T>, BNP<T>); //“3+4-2”重构 0006 BNP<T> rotate(BNP<T>); //局部旋转调整 0007 public: //基本接口:以virtual修饰,派生的BST变种可默认继承,也可根据各自的规则重写 0008 virtual BNP<T> search(const T&); //查找 0009 virtual BNP<T> insert(const T&, int h = 0); //插入(新节点作为叶子,高度为0) 0010 virtual bool remove(const T&); //删除 0011 }; //BST