在ArrayList中的PreOrder中编写BinTree值

时间:2018-01-21 15:50:06

标签: java arraylist tree preorder

我是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;
}

1 个答案:

答案 0 :(得分:0)

PreOrder遍历 PreOrder遍历的含义是每个节点在其任一子树之前处理。为简化起见,我们首先在其子节点之前访问每个节点。 PreOrder遍历的步骤是:

  1. 访问节点。
  2. 遍历PreOrder中的左子树。
  3. 在PreOrder中遍历右侧子树。
  4. 实现它有两种方法:

    • 递归
    • 迭代

    <强>递归:

    &#13;
    &#13;
     
    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;
    &#13;
    &#13;

    <强>迭代

    &#13;
    &#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;
    &#13;
    &#13;