Exemple #1
0
        private void GetAll(Node node, TrieBuffer buffer, StringBuilder wordBuilder)
        {
            if ((buffer.Index == DistinctCount) || (node == null))
            {
                return;
            }

            if (node.Left != null)
            {
                if (node == _root)
                {
                    wordBuilder.Clear();
                }

                GetAll(node.Left, buffer, new StringBuilder(wordBuilder.ToString()));
            }


            if (node.Middle != null)
            {
                wordBuilder.Append(node.Symbol);
                GetAll(node.Middle, buffer, wordBuilder);
            }

            if (node.Right != null)
            {
                if (node == _root)
                {
                    wordBuilder.Clear();
                }
                else
                {
                    if (wordBuilder.Length > 0)
                    {
                        wordBuilder.Remove(wordBuilder.Length - 1, 1);
                    }
                }

                GetAll(node.Right, buffer, new StringBuilder(wordBuilder.ToString()));
            }

            if (node.Counter > 0)
            {
                wordBuilder.Append(node.Symbol);
                buffer.Add(wordBuilder.ToString(), node.Counter);
            }

            if (wordBuilder.Length > 0)
            {
                wordBuilder.Remove(wordBuilder.Length - 1, 1);
            }
        }
Exemple #2
0
        public WordCounterPair[] GetAll()
        {
            if (_root == null)
            {
                return(new WordCounterPair[0]);
            }

            var buffer = new TrieBuffer(DistinctCount);

            GetAll(_root, buffer, new StringBuilder());

            return(buffer.Items);
        }