我有一个文件,其中包含一组数字及其父编号和每行中的子编号。我想在C中用它构建一棵树。我将如何通过它?
给出了示例文件:
Thisnode parentnode lchildnode rchildnode 1 14 -1 -1 2 13 -1 -1 3 10 -1 -1 4 9 -1 -1 5 13 -1 -1 6 11 -1 -1 7 9 -1 -1 8 12 -1 -1 9 10 7 4 10 11 3 9 11 12 10 6 12 15 11 8 13 14 2 5 14 15 13 1 15 -1 14 12
答案 0 :(得分:1)
完成此任务有两个部分。构建一个简单的scanner,并将未排序的列表组织到binary tree结构中。
创建一个包含四个阶段的finite-state machine(thisnode,parentnode,lchildnode,rchildnode)。当机器处于第一个状态(thisnode)时,分配一个新的"未排序的"叶子进入"顶部"列表此列表应足够大以容纳所有叶节点。还记得在最后一个阶段(rchildnode)结束时重置机器状态。
最后,从输入中读取一个char
,一次一个,并评估以下条件。
-
)0..9
之间,并将值应用于临时号码1.
或2.
为真,请阅读下一个数字迭代未排序的列表,找到" root"元件。使用初始值和子项,使用recursion"创建"填充二叉树结构的方法。有点像...
struct node {
int value;
struct node * left;
struct node * right;
};
struct node * create_node(int keyvalue, int lkey, int rkey)
{
struct node * n = malloc(sizeof(struct node));
n->value = keyvalue;
n->left = 0;
n->right = 0;
if(lkey > -1)
{
int llkey = your_iterator_left(lkey);
int lrkey = your_iterator_right(lkey);
n->left = create_node(lkey,llkey,lrkey);
}
if(rkey > -1)
{
int rlkey = your_iterator_left(rkey);
int rrkey = your_iterator_right(rkey);
n->right = create_node(rkey,rlkey,rrkey);
}
return n;
}
不是最干净的,但它会生成一个完整的二叉树。