我在这个问题上看过类似的question,但我不需要建立BST。
从给定的输入中,例如:2 0 3 0 1 0 3
,它将构建:
说明:
2 -> the root has 2 children
0 -> the left child of the root has no children
3 -> the rigth child of the root has 3 children
0 -> the leftmost child on the second level (whose grandparen is the root) has no children
1 -> the middle child on the second level has 1 child
0 -> the right most child on the second level has no children
3 -> the only node on the third level has 3 children
<empty> -> the nodes on the last level have no children
我的问题是获取节点子节点的索引。
我的想法是获取父节点索引的值,然后将计数器添加到它,我遇到的问题是如果节点没有任何子节点会发生什么?所有其他人都向右移动了1个。
请给我一些建议。
编辑:这是我用来生成树的代码块: 它必须构建给定序列的进程树
void ftree(int index, int parentIndex) {
int i, tmp, pid, child;
if(input[index] == 0){
sleep(1);
} else if(index >= inputSize) {
sleep(1);
} else if(index < inputSize) {
for(i = 0; i < input[index]; i++) {
if(parentIndex == -1) {
child = 1;
} else {
child = index + input[parentIndex] + i; // here is the calculation of the index of the child
}
pid = fork();
if (pid == 0) {
ftree(child, index);
break;
}
}
}
if(getpid() == pidOrg) {
pid = fork();
if(pid == 0) {
execlp("pstree", "pstree", pidString, "-c", NULL);
} else {
wait();
}
} else {
wait();
}
}
答案 0 :(得分:1)
对我来说最简单的方法是首先构建树,然后分叉树并创建进程树。
为了构建树,我创建了一个代表节点的结构:
typedef struct _node {
int val; // how many children the node has
struct _node **children; // all the children of the node
} node, *pNode;
以及代表队列的结构:
typedef struct _queue {
pNode el;
struct _queueInt *next;
} queue, *pQueue;
然后我浏览了输入并将新节点添加到队列中(首先是手动创建根节点,然后是队列不为空的其他节点),同时构建树结构。
我发现ADT队列非常适合这个特殊问题。
特别感谢我的一位同事帮助我完成了这项任务。