Я хочу пересечь двоичное дерево справа налево и добавить в очередь каждый элемент с одинаковой фамилией. Я правильно реализую класс списка очередей и класс дерева узлов, но я получаю исключение с нулевым указателем, когда пытаюсь найти что-то. (Конечно, я написал метод вставки для двоичного дерева).Как я могу пересечь двоичное дерево справа налево в java?
public class ST {
private TreeNode root;
private int size;
private Queue q;
public Queue searchByLastName(String last_name) {
searchByLastNameRec(this.root, last_name);
return q;
}
private void searchByLastNameRec(TreeNode newroot, String last_name) {
if (newroot == null)
return;
if (newroot.right != null) {
if (newroot.right.item.getLast_name().equalsIgnoreCase(last_name)) {
q.put(newroot.right.item);
}
searchByLastNameRec(newroot.right, last_name);
}
if (newroot.left != null) {
if (newroot.left.item.getLast_name().equalsIgnoreCase(last_name)) {
q.put(newroot.left.item);
}
searchByLastNameRec(newroot.left, last_name);
}
}
public class TreeNode {
Suspect item;
TreeNode left, right, parent;
int N;
public TreeNode(Suspect item) {
if (item == null)
throw new IllegalArgumentException();
this.item = item;
}
}
Вы, вероятно, получаете NPE на линиях 'если (newroot.right.item.getLast_name() equalsIgnoreCase (last_name).) 'и один для левой. Вы должны проверить, есть ли элемент перед его использованием, только листья будут иметь (должны иметь) предметы. – tkausl