二叉树创作

时间:2013-04-11 01:46:43

标签: java binary-tree

我正在尝试从0和1的输入创建二叉树。例如,如果输入是11010010,则输出的树将具有1作为根。 2将是1的左孩子,4将是正确的孩子。 2将有一个正确的孩子,它将是3.这是树的结尾。当树被预先遍历时,数字1-n(n是输入中的1的数量)被分配给被访问的节点。 1意味着根有孩子。例如,第一个1意味着访问了根,并将1作为根。第二个意味着根有一个左子,一个放在那里。之后的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;  
 } 

}

1 个答案:

答案 0 :(得分:0)

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

如果有帮助,首先将字符串转换为ArrayList<int>个值以放入节点 - 例如,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);
}