Почему я получаю исключение нулевого указателя при обходе порядка уровней с использованием класса ArrayDeque для реализаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Почему я получаю исключение нулевого указателя при обходе порядка уровней с использованием класса ArrayDeque для реализа

Сообщение Гость »


Примечание. Когда я заменяю ArrayDeque на LinkedList в своем коде, это работает хорошо, но в противном случае выдает исключение NullPointerException. Почему так?

Я пытаюсь выполнить обход по уровням двоичного дерева, и для этого я использую структуру данных очереди, и, как мы знаем, мы можем реализовать очередь, используя либо класс LinkedList, либо класс ArrayDeque в Java. Использование ArrayDeque вызывает исключение NullPointerException.

import java.util.ArrayDeque; импортировать java.util.LinkedList; импортировать java.util.Queue; общественный класс TestBinaryTree { статический класс Node{ целочисленные данные; Узел слева; Узел правый; Узел (целое значение) { данные = значение; } } публичный статический класс BinaryTree{ размер int = 0; Корень узла = ноль; интервал я = -1; логическое значение firstNode = true; public int size() {возвращаемый размер;} Node build(int[] arr) { я++; если(arr == -1) { если (я == 0) я =-1; вернуть ноль; } Узел currNode = новый узел (arr); размер++; если (первый узел) { корень = currNode; первыйузел = ложь; } currNode.left = build(arr); currNode.right = build (arr); вернуть текущий узел; } общественный недействительный уровень () { Queue q = новый ArrayDeque(); //Если я изменю его на LinkedList, мой код будет работать нормально if(root != null) q.add(root); иначе возврат; q.add(ноль); while(!q.isEmpty()) { Карр узла = q.remove(); если (курр == ноль) { if(q.isEmpty()) перерыв; Система.out.println(); q.add(ноль); } еще { System.out.print(curr.data + " "); if(curr.left != null) q.add(curr.left); if(curr.right != null) q.add(curr.right); } } } } public static void main(String[] args) { int[] arr = {1,2,4,-1,-1,5,-1,-1,3,-1,6,-1,-1}; BinaryTree bt = новый BinaryTree(); bt.build(обр); BT.levelorder(); //Порядок уровней } } Когда я заменяю его на LinkedList, он выдает следующий результат:

1 2 3 4 5 6 Почему возникла проблема?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»