Я просматриваю двоичное дерево предварительного заказа кода с использованием итеративного метода. Похоже, они это делают:
Deque <TreeNode> stack = new LinkedList <TreeNode> ();
Почему бы просто не сделать:
Deque <TreeNode> stack = new Deque <TreeNode> ();
Я не вижу, чтобы в коде использовалось что-то конкретное из LinkedList.
public class PreOrder {
public static List<Integer> preorderTraversalIterative(TreeNode root) {
List<Integer> preorder = new ArrayList<Integer>();
if (root == null) {
return preorder;
}
Deque<TreeNode> stack = new LinkedList<TreeNode>(); //Why?
stack.offerFirst(root);
while(!stack.isEmpty()) {
TreeNode cur = stack.pollFirst();
if (cur.right != null) {
stack.offerFirst(cur.right);
}
if (cur.left != null) {
stack.offerFirst(cur.left);
}
preorder.add(cur.key);
}
return preorder;
}
}




Deque - интерфейс; вы не можете создать его экземпляр, не предоставив реализацию для все его методов abstract, что уже делает LinkedList.
Виноват. Когда я пытался скомпилировать. Компилятор уже жалуется на: java.util.List является абстрактным; не может быть инсталлирован.