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(); }