Untitled
unknown
plain_text
4 years ago
3.3 kB
9
Indexable
static void readFile(string fileName)
{
const int MAX_FILE_LINES = 50000;
string[] AllLines = new string[MAX_FILE_LINES];
AVLTree<String> tree = new AVLTree<string>();
//reads from bin/DEBUG subdirectory of project directory
AllLines = File.ReadAllLines(fileName);
//Create a dictionary to store the unique words and how many times they occur.
var wordDict = new Dictionary<string, int>();
foreach (string line in AllLines)
{
//split words using space , . ?
string[] words = line.Split(' ', ',', '.', '?', ';', ':', '!');
foreach (string word in words)
{
if (!string.IsNullOrEmpty(word))
{
//Remove leading and trailing spaces, and convert the word to lower case.
var lowerCaseWord = word.Trim().ToLower();
// Console.WriteLine(word.ToLower());
tree.InsertItem(lowerCaseWord);
//If the word already exists, increase the count by 1, if not add the new word.
if (wordDict.ContainsKey(lowerCaseWord))
{
wordDict[lowerCaseWord] += 1;
}
else
{
wordDict.Add(lowerCaseWord, 1);
}
}
}
}
class AVLTree<T> : BSTree<T> where T : IComparable
{
private void calculateBalance(ref Node<T> tree)
{
tree.BalanceFactor = Height(tree.Left) - Height(tree.Right);
}
public new void InsertItem(T item)
{
insertItem(item, ref root);
}
private void insertItem(T item, ref Node<T> tree)
{
if (tree == null)
tree = new Node<T>(item);
else if (item.CompareTo(tree.Data) < 0)
insertItem(item, ref tree.Left);
else if (item.CompareTo(tree.Data) > 0)
insertItem(item, ref tree.Right);
tree.BalanceFactor = Height(tree.Left) - Height(tree.Right);
if (tree.BalanceFactor <= -2)
rotateLeft(ref tree);
if (tree.BalanceFactor >= 2)
rotateRight(ref tree);
}
private void rotateLeft(ref Node<T> tree)
{
if (tree.Right.BalanceFactor > 0) //double rotate
rotateRight(ref tree.Right);
Node<T> newRoot = tree.Right;
Node<T> tempNode = tree.Left;
newRoot.Left = tree;
tree.Right = tempNode;
tree = newRoot;
}
private void rotateRight(ref Node<T> tree)
{
if (tree.Left.BalanceFactor < 0)
rotateLeft(ref tree.Left);
Node<T> newRoot = tree.Left;
Node<T> tempNode = newRoot.Right;
newRoot.Right = tree;
tree.Left = tempNode;
tree = newRoot;
}Editor is loading...