public static int bstDistance(int[] values, int n, int node1, int node2)
        {
            // WRITE YOUR CODE HERE
            if (null == values || values.Length == 0 || n <= 0)
            {
                return(-1);
            }

            Node root = new Node(values[0]);

            for (int i = 1; i < n; i++)
            {
                root.Insert(values[i]);
            }

            //int distNode1 = root.Distance(root, node1) - 1;
            //int distNode2 = root.Distance(root, node2) - 1;
            //int commonParentNode = root.CommonParentNode(root, node1, node2).Value;
            //int distToCommongParent = root.Distance(root, commonParentNode) - 1;

            //if (distNode1 == -1 || distNode2 == -1)
            //    return -1;
            //else
            //    return (distNode1 + distNode2) - 2 * distToCommongParent;

            Node commonParentNode = CommonParentNode(root, node1, node2); //One of both nodes are not found in tree.

            if (commonParentNode == null)
            {
                return(-1);
            }
            else
            {
                //Recursive
                int distNode1 = Distance(commonParentNode, node1) - 1;
                int distNode2 = Distance(commonParentNode, node2) - 1;

                ////Iterative
                //int distNode1 = Distance(commonParentNode, node1);
                //int distNode2 = Distance(commonParentNode, node2);

                if (distNode1 == -1 || distNode2 == -1)
                {
                    return(-1);
                }
                else
                {
                    return(distNode1 + distNode2);
                }
            }
        }
        public static void Init()
        {
            //Node node1111 = new Node(1111);
            //Node node111 = new Node(111);
            //Node node11 = new Node(11);
            //Node node12 = new Node(12);
            //Node node1 = new Node(1);
            //Node root = new Node(0);
            //Node node2 = new Node(2);
            //Node node21 = new Node(21);
            //Node node211 = new Node(211);
            //root.Childs.Add(node1);
            //root.Childs.Add(node2);
            //node1.Childs.Add(node11);
            //node1.Childs.Add(node12);
            //node11.Childs.Add(node111);
            //node111.Childs.Add(node1111);
            //node2.Childs.Add(node21);
            //node21.Childs.Add(node211);

            //List<Node> path = root.Depth;
            //foreach (Node n in path)
            //    Console.Write(String.Format("{0} - ", n.ToString()));

            //Console.WriteLine();

            //Node node2111 = new Node(2111);
            //node2111.Childs.Add(new Node(21111));
            //node211.Childs.Add(node2111);

            //path = root.Depth;
            //foreach (Node n in path)
            //    Console.Write(String.Format("{0} - ", n.ToString()));

            //Console.WriteLine();

            //            15
            //   5                 25
            //2    10          22       29
            //   7    12     21  23  27    30
            // 6   8                    28

            Console.WriteLine("Print after insert Node");
            Node rootRD = new Node(15);

            rootRD.Insert(5);
            rootRD.Insert(10);
            rootRD.Insert(25);
            rootRD.Insert(22);
            rootRD.Insert(29);
            rootRD.Insert(2);
            rootRD.Insert(7);
            rootRD.Insert(12);
            rootRD.Insert(6);
            rootRD.Insert(8);
            rootRD.Insert(21);
            rootRD.Insert(23);
            rootRD.Insert(27);
            rootRD.Insert(30);
            rootRD.Insert(28);
            rootRD.PrintTree();
            Console.WriteLine("Is node with value 13 present? " + Node.IsPresent(rootRD, 13).ToString());
            Console.WriteLine("Leave nodes are :"); rootRD.PrintLeaves();
            Console.WriteLine("Outer nodes are :"); rootRD.PrintOuterNodes();
        }