public static NodeP GetNext(NodeP node)
        {
            if (node == null)
            {
                return(null);
            }

            if (node.Right != null)
            {
                return(MinNode(node.Right));
            }

            var parent      = node.Parent;
            var nodeToCheck = node;

            while (parent != null)
            {
                if (parent.Left == nodeToCheck)
                {
                    return(parent);
                }

                nodeToCheck = parent;
                parent      = parent.Parent;
            }

            return(null);
        }
        public static NodeP MinNode(NodeP node)
        {
            if (node == null || node.Left == null)
            {
                return(node);
            }

            return(MinNode(node.Left));
        }