#ifndef TREE_H #define TREE_H #include "Object.h" namespace Kylin { template class TreeNode { public: TreeNode(const T &value, TreeNode *parent) : value(value), parent(parent) {} T value; TreeNode *parent = nullptr; virtual ~TreeNode() {} }; template class Tree : public Object { public: virtual bool insert(TreeNode *node) = 0; virtual TreeNode *find(const T &value) const = 0; virtual bool find(TreeNode *node) const = 0; virtual TreeNode *root() const = 0; virtual int degree() const = 0; virtual int count() const = 0; virtual int height() const = 0; virtual void clear() = 0; protected: TreeNode *m_root = nullptr; }; } // namespace Kylin #endif // TREE_H