TreeLinkNode Insert(int value)
            {
                TreeLinkNode nextTry = null;

                if (value > val)
                {
                    if (right == null)
                    {
                        right      = new TreeLinkNode(value);
                        right.next = this;
                        return(right);
                    }
                    else
                    {
                        nextTry = right;
                    }
                }

                if (value < val)
                {
                    if (left == null)
                    {
                        left      = new TreeLinkNode(value);
                        left.next = this;
                        return(left);
                    }
                    else
                    {
                        nextTry = left;
                    }
                }

                return(nextTry.Insert(value));
            }
            public static TreeLinkNode Create(int[] arr, int targetVal)
            {
                TreeLinkNode target = null;
                var          head   = new TreeLinkNode(arr[0]);

                if (head.val == targetVal)
                {
                    target = head;
                }
                for (var i = 1; i < arr.Length; ++i)
                {
                    var node = head.Insert(arr[i]);
                    if (node.val == targetVal)
                    {
                        target = node;
                    }
                }

                return(target);
            }