【问题标题】:Binary Tree Creation二叉树创建
【发布时间】:2013-04-11 01:46:43
【问题描述】:

我正在尝试从 0 和 1 的输入创建二叉树。例如,如果输入是 11010010,那么输出的树将以 1 作为根。 2 是 1 的左孩子, 4 是右孩子。 2 将有一个正确的孩子,它将是 3。那是树的尽头。当树按前序遍历时,数字 1-n(n 是输入中 1 的数量)被分配给被访问的节点。 1 表示根有孩子。例如,第一个 1 表示访问了根,并将 1 放置为根。第二个 1 表示根有一个左孩子,而 2 则放在那里。后面的 0 表示它没有左孩子。下一个 1 表示它确实有一个正确的孩子,并且 3 被放置在那里,等等。我对如何创建这棵树感到困惑。我了解在创建树后遍历树,但不了解如何通过遍历树来创建树。任何帮助将不胜感激。

package tree;

import java.io.*;

public class BinaryTree<ArrayList> implements Serializable
{   
private static final long serialVersionUID = 1L;

protected static class Node<ArrayList> implements Serializable
{
    private static final long serialVersionUID = 1L;

    protected int data;
    protected Node<ArrayList> left;
    protected Node<ArrayList> right;

    public Node(int data)
    {
        this.data = data;
        left = null;
        right = null;
    }

    public boolean isLeft() 
    {
        return (left == null);
    }
}

protected Node<ArrayList> root;;

public BinaryTree(int x)
{
    Node<ArrayList> node = new Node<ArrayList>(x);
    this.root = node;
}

public boolean isLeft()
{
    return(root.left == null);
}

public void addLeft(int m, BinaryTree.Node<ArrayList> node)
{
    root = new Node<ArrayList>(m);
    node.left = root;
}   

 public void preorder(Node<ArrayList> temp)  
 {  
      if (temp!=null)  
      {  
           System.out.println(temp.data);  
           preorder(temp.left);  
           preorder(temp.right);  
      }  
      else  
           return;  
 } 

}

【问题讨论】:

  • 你能把它格式化成更易读吗?
  • @Jayamohan 对不起,我不明白你的意思。格式化问题?
  • 您的问题是什么?你也试过什么吗?我建议您至少提供一点代码来帮助说明您的问题。
  • @Code-Guru 我添加了代码,实际上我的问题是如何按顺序创建二叉树。

标签: java binary-tree


【解决方案1】:

听起来您正在以默认的广度优先方式构建树,根据字符串的内容为每个节点分配值。

如果有帮助,首先将字符串转换为 ArrayList&lt;int&gt; 值以放入节点 - 例如,11010010 将变为 {1, 2, 4, 7},字符串中每个集合的索引为 1。

现在,我们必须构建树 - 但我们将始终以完全相同的方式构建树,称为广度优先,因为在深入之前先完全填充浅层。我们制作一个节点,然后告诉它“制作您的左节点,然后制作您的右节点,然后告诉您的左节点执行此操作,然后告诉您的右节点执行此操作”。 (这与深度优先相反,你先制作左节点,告诉左节点制作节点,然后制作右节点并告诉右节点制作节点)

所以你会有一个类似于这个伪代码的递归方法:

void continueTree(ArrayList<int> numbers)
{
    if (numbers.count() == 0) return;
    this.left = new Node(numbers.get(0));
    numbers.remove(0);
    if (numbers.count() == 0) return;
    this.right = new Node(numbers.get(0));
    numbers.remove(0);
    this.left.continueTree(numbers);
    this.right.continueTree(numbers);
}

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 2013-12-29
    • 2011-05-08
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多