我是Java初学者,我有一个任务: 给出了二叉树,我应该在ArrayList中的preorder-traversal中写出这个树的值。我已经给出了这个方法,但我已经消耗了,因为该方法没有任何参数。该方法在另一个类中调用:
tree.toPreOrderList();
我想到了以下内容,但我认为这不正确:
public ArrayList<T> toPreOrderList() {
ArrayList<T> list = new ArrayList<>();
list.set(0, root.getData()); //root is declared abouve as Node<T> root;
int i = 1;
while (root.getLeft() != null) {
list.set(i, root.getLeft().getData());
i++;
}
i++;
while (root.getRight() != null) {
list.set(i, root.getRight().getData());
i++;
}
return list;
}
答案 0 :(得分:0)
PreOrder遍历 PreOrder遍历的含义是每个节点在其任一子树之前处理。为简化起见,我们首先在其子节点之前访问每个节点。 PreOrder遍历的步骤是:
实现它有两种方法:
<强>递归:强>
public void preorder(TreeNode root) {
if(root != null) {
//Visit the node by Printing the node data
System.out.printf("%d ",root.data);
preorder(root.left);
preorder(root.right);
}
}
&#13;
<强>迭代强>
public void preorderIter(TreeNode root) {
if(root == null)
return;
Stack<TreeNode> tree = new Stack<TreeNode>();
tree.push(root);
while(!stack.empty()){
TreeNode treeNode = tree.pop();
System.out.printf("%d ",n.data);
if(treeNode.right != null){
tree.push(treeNode.right);
}
if(treeNode.left != null){
tree.push(treeNode.left);
}
}
}
&#13;