【发布时间】:2012-01-27 11:10:38
【问题描述】:
我需要将一个二叉树写入 HDFS,我将用它来表示一个决策树。但为了做到这一点,我首先需要创建一个 BinaryTreeNode 类,它将是树节点。这些是我的类属性:
private String name;
private String attribute;
private String attType;
private String condition;
private String lines;
private BinaryTreeNode leftChild;
private BinaryTreeNode rightChild;
所以现在我需要实现 write 和 readFields 方法来读写这些节点。这些是我所做的:
public void write(DataOutput d) throws IOException
{
d.writeUTF(name);
d.writeUTF(attribute);
d.writeUTF(attType);
d.writeUTF(condition);
d.writeUTF(lines);
//SOMETHIN FOR LEFT AND RIGHT CHILD
}
public void readFields(DataInput di) throws IOException
{
name=di.readUTF();
attribute=di.readUTF();
attType=di.readUTF();
condition=di.readUTF();
lines=di.readUTF();
//SOMETHIN FOR LEFT AND RIGHT CHILD
}
BinaryTreeNode read(DataInput in) throws IOException
{
BinaryTreeNode ob = new BinaryTreeNode();
ob.readFields(in);
return ob;
}
我想不到的是如何编写和读取我的 2 个子节点。请注意,树将递归构建,每个节点将有 0-2 个子节点。所以我后来的目的是拥有一个 BinaryTree 类,该类将具有属性 BinaryTreeNode 根。谢谢
【问题讨论】:
-
所以它是一个二叉搜索树。您不能从一次遍历中构建二叉搜索树。需要同时写
in-order, post-order或者in-order, pre-order遍历,这样就可以构造主树了。 -
我只需要一种方法来保存和加载我的树。如果我以某种方式找到一种方法来保存我的根目录并将其加载为对象,那么我的目标将实现。好吧,它不是二叉搜索树。它是用于机器学习的决策树。由于我正在进行二进制拆分,因此它是一棵二叉树。我需要保存并加载该模型。
标签: java hadoop binary-tree writable