#pragma once enum Color { RED, BLACK }; template class TreeNode { public: T element; TreeNode* left; TreeNode* right; TreeNode* parent; Color color; TreeNode() : left(nullptr), right(nullptr), parent(nullptr), color(Color::RED) {} TreeNode(const T& e) : element(e), left(nullptr), right(nullptr), parent(nullptr), color(Color::RED) {} TreeNode(const T& e, TreeNode* l, TreeNode* r, TreeNode* p) : element(e), left(l), right(r), parent(p), color(Color::RED) {} };