Write a C program to implement the AVL tree paradigm. Your AVL tree implementation should deal with nodes involving a key and a count. The key is a character string, whereas the count is an integer which serves as the frequency count of the key. For example, if the same key has been inserted three times, then the count value should be 3.
Your program should show a menu with the following options:
Description:
Ø When option 1 is selected, your program should take a file name from the user as input, open that file, read and insert keys into an AVL tree on the word-by-word basis. A testing input file is provided along with this assignment.
Ø If option 2 is selected, your program should ask for a key, then search the initialized AVL tree and display the key and its frequency count if the key is found, or no_such_key if failed to find it.
Ø For option 3, your program should ask for the key to be inserted and then search for the position where the key should be placed. Your insert function shall increase the count if the key has already been in the AVL tree, or carry out the actual insertion if the key is a new one (set the count to be 1).
Ø For option 4, your program should ask for the key to be removed and then search for the matching key. If failed to find the given key, no_such_key will be displayed. If found, the tree node will be removed only if its frequency count is 1, or decrease the count otherwise.
Ø When option 5 is selected, you should compute and display the height and the size of the AVL tree.
Ø When option 6 is selected, your program should ask for a positive integer, and then display all keys whose frequency counts are greater than or equal to the given integer. Note, to implement this option, you need to traverse the AVL tree completely.
Ø Option 7 terminates your program.