///------------ 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);
        }
Ejemplo n.º 2
0
        /// <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();
        }