Я пытаюсь сохранить свои результаты обхода Inorder в LinkedList и получить их с помощью итератора, но получаю исключение нулевого указателя при печати моих результатов. Я получаю правильный вывод, когда пытаюсь сделать это с помощью рекурсии и печатать значение в своей функции. Когда я рекурсивно пытаюсь вызвать inorderItr(root.left)
, он принимает root
как нуль. Я думаю, что мой оператор возврата неверен. Не уверен, ниже мой код и комментарии, где мой код не работает. Любая помощь и концепции приветствуются. Я видел это, но не помогает, так как я пытаюсь вернуть Iterator
. Опять же, я новичок в концепции Java и Iterator
. ТИА.
Изменить: я нашел решение, см. Ответ ниже
class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int d) {
data = d;
}
}
public class TreeTraversal {
TreeNode root;
public TreeTraversal() {
root = null;
}
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
List<TreeNode> l = new LinkedList<TreeNode>();
//I think I am missing something here
if (root == null)
return
//This is where my root is null
inorderItr(root.left);
l.add(root);
inorderItr(root.right);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
//This code works fine
public static void inorderWorksFine(TreeNode root) {
if (root == null)
return;
inorder(root.left);
System.out.print(root.data + " ");
inorder(root.right);
}
public static void main(String args[]) {
TreeTraversal t = new TreeTraversal();
t.root = new TreeNode(10);
t.root.left = new TreeNode(5);
t.root.left.left = new TreeNode(1);
t.root.left.right = new TreeNode(7);
t.root.right = new TreeNode(40);
t.root.right.right = new TreeNode(50);
// inorderWorksFine(t.root);
Iterator<TreeNode> itr = inorderItr(t.root);
while (itr.hasNext()) {
System.out.println(itr.next().data + " ");
}
}
}
Iterator
, я видел это решение. Можете ли вы помочь внести изменения в приведенный выше код и сказать мне, что с этим не так? - person Yogesh   schedule 21.12.2017Iterator
, как мне поступить? - person Yogesh   schedule 21.12.2017