Я работаю над деревом AVL, в котором хранятся слова и определения. У меня возникли проблемы с использованием командной строки аргумента для чтения моего файла, кажется, он отказывается читать его, если я не запускаю его в качестве аргумента? (Построить аргумент Run в JGr asp). Это код, который я должен запустить в качестве аргумента командной строки в дереве AVL:
Scanner sc = new Scanner(new File(args[0]));
Scanner scanner = new Scanner(System.in);
У меня также возникают трудности при поиске высоты моего дерева ? Он продолжает давать мне 0, когда высота файла, который я помещаю, не равна 0
System.out.println(tree.height(tree.root));
Это весь мой код:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Vector;
import java.io.IOException;
public class Dictionary{
String word;
int height;
Dictionary left;
Dictionary right;
Vector v;
Dictionary(String data,String Defn)
{
word = data;
v = new Vector();
v.add(Defn);
height = 1;
}
}
class AVLTree {
Dictionary root;
static int flag = 0;
int height(Dictionary N) {
if (N == null)
return 0;
return N.height;
}
int max(int a, int b) {
return (a > b) ? a:b;
}
Dictionary rightRotate(Dictionary input) {
Dictionary x = input.left;
Dictionary y = x.right;
x.right = input;
input.left = y;
input.height = max(height(input.left), height(input.right)) + 1;
x.height = max(height(x.left), height(x.right)) + 1;
return x;
}
Dictionary leftRotate(Dictionary x) {
Dictionary input = x.right;
Dictionary y = input.left;
input.left = x;
x.right = y;
x.height = max(height(x.left), height(x.right)) + 1;
input.height = max(height(input.left), height(input.right)) + 1;
return input;
}
int getBalance(Dictionary N) {
if (N == null)
return 0;
return height(N.left) - height(N.right);
}
//insert
Dictionary insert(Dictionary root, String word, String Defn) {
if (root == null)
return (new Dictionary(word,Defn));
if ((word.compareTo(root.word)) < 0)
root.left = insert(root.left, word,Defn);
else if ((word.compareTo(root.word)) > 0)
root.right = insert(root.right, word,Defn);
else
return root;
root.height = 1 + max(height(root.left),
height(root.right));
int balance = getBalance(root);
if (balance > 1 && (word.compareTo(root.left.word)) < 0)
return rightRotate(root);
if (balance < -1 && (word.compareTo(root.left.word)) < 0)
return leftRotate(root);
if (balance > 1 && (word.compareTo(root.left.word)) < 0) {
root.left = leftRotate(root.left);
return rightRotate(root);
}
if (balance < -1 && (word.compareTo(root.left.word)) < 0) {
root.right = rightRotate(root.right);
return leftRotate(root);
}
return root;
}
void search(Dictionary root,String word) {
if (root == null)
{
if(word.equals(root.word)){
flag = 1;
for(int i=0;i<root.v.size();i++)
System.out.println(root.v.get(i));
}
this.search(root.left,word);
this.search(root.right,word);
}
}
public static void main(String[] args) throws Exception {
AVLTree tree = new AVLTree();
while(sc.hasNext()) {
String str = sc.nextLine();
String arr[] = str.split(" ");
String word = arr[0];
String Defn = str.substring(arr[0].length()+1);
tree.root = tree.insert(tree.root,word,Defn);
}
System.out.println(tree.height(tree.root));
while(true){
System.out.print("$ ");
String command = scanner.next();
if(command.equals("SEARCH")){
String word = scanner.next();
flag = 0;
tree.search(tree.root,word);
if(flag == 0)
System.out.println("Word does not exist");
}
else if(command.equals("EXIT"))
break;
else
System.out.println("Invalid Command");
}
}
}