enum Color {red, black}; template class TreeNode { private: T item; TreeNode *leftChild; TreeNode *rightChild; TreeNode *parent; Color color; public: TreeNode(const T& newItem) { // Initializes tree node with item and no children. item = newItem; leftChild = NULL; rightChild = NULL; parent = NULL; color = red; } // end constructor TreeNode(T newItem, TreeNode *left, TreeNode *right, Color col) { // Initializes tree node with item and // the left and right children references. item = newItem; leftChild = left; rightChild = right; parent = NULL: color = col; } // end constructor const T& getItem() const { // Returns the item field. return item; } // end getItem void setItem(const T& newItem) { // Sets the item field to the new value newItem. item = newItem; } // end setItem TreeNode *getLeft() const { // Returns the reference to the left child. return leftChild; } // end getLeft void setLeft(TreeNode *left) { // Sets the left child reference to left. leftChild = left; } // end setLeft TreeNode *getRight() const { // Returns the reference to the right child. return rightChild; } // end getRight void setRight(TreeNode *right) { // Sets the right child reference to right. rightChild = right; } // end setRight TreeNode *getParent() const { // Returns the reference to the right child. return parent; } // end getRight void setParent(TreeNode *newParent) { // Sets the right child reference to right. parent = newParent; } // end setRight Color getColor() { // Returns the color of the node return color; } void setColor(Color newColor) { // Sets the color of the node color = newColor; } }; // end TreeNode