Java 二叉树创建
我正在尝试从0和1的输入创建一个二叉树。例如,如果输入是11010010,那么输出的树将有1作为根。2是1的左孩子,4是右孩子。2会有一个合适的孩子,那就是3。那是树的尽头。当按预先顺序遍历树时,数字1-n(n是输入中1的数量)被分配给所访问的节点。A 1表示根有子级。例如,第一个1表示访问根目录,并将1作为根目录放置。第二个1表示根有一个左子级,并在那里放置一个2。之后的0表示它没有左子级。下一个1表示它确实有一个正确的子级,3放在那里,等等。我不知道这棵树是如何创建的。我理解在树被创建后遍历它,但不理解如何通过遍历它来创建树。任何帮助都将不胜感激Java 二叉树创建,java,binary-tree,Java,Binary Tree,我正在尝试从0和1的输入创建一个二叉树。例如,如果输入是11010010,那么输出的树将有1作为根。2是1的左孩子,4是右孩子。2会有一个合适的孩子,那就是3。那是树的尽头。当按预先顺序遍历树时,数字1-n(n是输入中1的数量)被分配给所访问的节点。A 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;
}
包树;
导入java.io.*;
公共类二进制树实现了可序列化
{
私有静态最终长serialVersionUID=1L;
受保护的静态类节点实现可序列化
{
私有静态最终长serialVersionUID=1L;
受保护的int数据;
左保护节点;
受保护的节点权限;
公共节点(int数据)
{
这个数据=数据;
左=空;
右=空;
}
公共布尔值isLeft()
{
返回(左==null);
}
}
受保护的节点根;;
公共二叉树(intx)
{
节点=新节点(x);
this.root=节点;
}
公共布尔值isLeft()
{
返回(root.left==null);
}
public void addLeft(int m,BinaryTree.Node)
{
根=新节点(m);
node.left=根;
}
公共无效预订单(节点临时)
{
如果(温度!=null)
{
系统输出打印LN(温度数据);
预订单(左侧温度);
预订单(右侧温度);
}
其他的
返回;
}
}听起来像是在以默认的广度优先方式构建一棵树,根据字符串的内容为每个节点分配值 如果有帮助,首先将字符串转换为要放入节点的值的
ArrayList
——例如,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);
}
void continueTree(数组列表编号)
{
如果(numbers.count()==0)返回;
this.left=新节点(numbers.get(0));
数字。删除(0);
如果(numbers.count()==0)返回;
this.right=新节点(numbers.get(0));
数字。删除(0);
this.left.continueTree(数字);
这个.right.continueTree(数字);
}
您能将其格式化为更可读的格式吗。@Jayamohan对不起,我不知道您的意思。格式化问题?你的问题是什么?你也试过什么吗?我建议您至少提供一点代码来帮助说明您的问题。@code Guru我添加了代码,实际上我的问题是如何按预排序创建二叉树。