0001 template <typename T> class BinTree { //二叉树模板类 0002 protected: 0003 Rank _size; BNP<T> _root; //规模、根节点 0004 public: 0005 BinTree() : _size(0), _root(nullptr) {} //构造 0006 ~BinTree() { remove(_root); } //析构 0007 BinTree(const BinTree<T>&); //复制 0008 BinTree(const BNP<T>); //复制 0009 Rank size() const { return _size; } //规模 0010 bool empty() const { return !_root; } //判空 0011 BNP<T> root() const { return _root; } //树根 0012 BNP<T> insert(const T&); //插入根节点 0013 BNP<T> insert(const T&, BNP<T>); //插入左孩子 0014 BNP<T> insert(BNP<T>, const T&); //插入右孩子 0015 BNP<T> attach(BinTree<T>, BNP<T>); //接入左子树 0016 BNP<T> attach(BNP<T>, BinTree<T>); //接入右子树 0017 BinTree<T> secede(BNP<T>); //子树分离 0018 Rank remove(BNP<T>); //子树删除 0019 template <typename V> void traverse(V& visit) //遍历 0020 { if (_root) _root->traverse(visit); } 0021 BinTree<T>& operator=(const BinTree<T>&); //赋值 0022 bool operator<(const BinTree<T>& t) const //比较器(示例一个,其余自行补充) 0023 { return _root && t._root && (_root->data < t._root->data); } 0024 }; //BinTree