///------------ Solution assuming no links to parent node ------------------------------------ public static List <TreeNode> FindPathBetweenTwoNodes(TreeNode root, TreeNode start, TreeNode end) { if (root == null || start == null || end == null) { return(null); } List <TreeNode> path = new List <TreeNode>(); if (start == end) { path.Add(start); return(path); } // O(n) to get LCA TreeNode commonAncestor = FindLowestCommonAncestor.GetCommonAncestor(root, start, end); if (commonAncestor == null) { return(path); // start and end not not both under root } // build a child/parent map of the nodes below the common ancestor to make path building easier Dictionary <TreeNode, TreeNode> childParentMap = new Dictionary <TreeNode, TreeNode>(); BuildChildParentMap(commonAncestor, null, childParentMap); while (start != commonAncestor) { path.Add(start); start = childParentMap[start]; } path.Add(commonAncestor); Stack <TreeNode> endPath = new Stack <TreeNode>(); while (end != commonAncestor) { endPath.Push(end); end = childParentMap[end]; } while (endPath.Count != 0) { path.Add(endPath.Pop()); } return(path); }
/// <summary> /// interview questions for string problems /// </summary> /// <param name="args"></param> static void Main(string[] args) { String[] words = { "abcde", "hello", "apple", "kite", "padle" }; foreach (string w in words) { Console.WriteLine(w + " : " + RandomStringProblem.isUniqueChars(w)); } String s = "helloiloveyou"; Console.WriteLine(s + " -> " + RandomStringProblem.RemoveDuplicateCharacters(s)); Console.WriteLine(s + " -> " + RandomStringProblem.RemoveDuplicateCharacters(s.ToCharArray())); Console.WriteLine("apple, papel : " + RandomStringProblem.anagram("apple", "papel")); Console.WriteLine("carrot, tarroc : " + RandomStringProblem.anagram("carrot", "tarroc")); Console.WriteLine("hello, llloh : " + RandomStringProblem.anagram("hello", "llloh")); s = "A quick brown fox jumped over the log"; var sarr = s.ToArray(); var saar2 = s.ToArray(); RandomStringProblem.ReplaceFun(ref sarr, sarr.Length); RandomStringProblem.ReplaceFun(ref saar2, sarr.Length); Console.WriteLine(string.Concat(sarr)); Console.WriteLine(string.Concat(saar2)); Console.WriteLine("aabcccaa => " + RandomStringProblem.compress("aabcccaa")); Console.WriteLine("aaaaaaab => " + RandomStringProblem.compress("aaaaaaab")); Console.WriteLine("ababababab => " + RandomStringProblem.compress("ababababab")); Console.WriteLine("avfffff => " + RandomStringProblem.compress("avfffff")); FindFirstNonRepeatingChar.Test(); /// Linked List Problems LinkedListNode head = AssortedMethods.randomLinkedList(10, 0, 3); Console.WriteLine(head.printForward()); LinkedListProblems.deleteDups(head); Console.WriteLine(head.printForward()); // wordbreak problems TestWordBreak.Run(); //MedianOfMedians.TestMedianOfMedians(); LongestCommonSubsequence.Test(); SumOfMaxRunningSequence.Test(); TestRankNode.Test(); NextInorderSuccessor.Test(); CircularArrayTest.Test(); LongestPalindrome.Test(); IsomorphicStrings.Test(); FindMinAbsFrom2Arrays.Test(); ValidateIsBST.Test(); CoinPuzzle.Test(); BinarySearch.Test(); RansomNote.Test(); atoi.Test(); TrieTest.Test(); IsTreeBalanced.Test(); //TestProducerConsumer.Test(); ShuffleDeck.Test(); //QuickRankSearch.Test(); ParenthesisCombo.Test(); Permutations.Test(); Combinations.Test(); CompressString.Test(); BuildTreeFromMatrixInput.Test(); FindAllRepeatingSubstrings.Test(); PrintTreePaths.Test(); FindLowestCommonAncestor.Test(); PrintLevelsOfABinaryTree.Test(); FindPathBetween2NodesInTree.Test(); FindPathExistsInGraph.Test(); FindPathBetween2GraphNodes.Test(); // RealTimeCounterTest.Test(); DistanceBetweenWordsInASentence.Test(); SearchingForNextCharInSearch.Test(); HashMapTester.Test(); FindElementInRotatedArray.Test(); SubTrees.Test(); LongestCommonSubstring.Test(); LongestIncreasingSequenceQuestion.Test(); ConvertTreeIntoDoublyLinkedList.Test(); Count2sBetween0andN.Test(); TestSuffixTrees.Test(); TransformWordIntoOtherWord.Test(); IsNumberAPalindrome.Test(); ConvertNumberToPhrase.Test(); CountBinary1sInStream.Test(); ReverseBitsInUnsignedInt.Test(); ReverseLinkedList.Test(); DeleteDups.Test(); _3SUM.Test(); ArraySequencesThatAddUpToSum.Tests(); FindBSTNodesThatSumUpToValue.Test(); LengthOfLongestSubstringProblem.Test(); //BuildTreeFromInorderAndPreorderTraversal.Test(); ConvertTreeToDLL.Test(); FindMissingNumberInString.Test(); SortStackWithAnotherStack.Test(); QueueFrom2Stacks.Test(); Sort2Queues.Test(); ConvertRomanNumeralToInt.Test(); MergeAllLists.Test(); DivideWithoutSlash.Test(); //RegularExpression.Test(); IsNumberValid.Test(); Console.ReadKey(); }