【发布时间】:2018-03-17 10:15:11
【问题描述】:
我正在尝试使用 2 个儿子创建二叉搜索树。如果已找到搜索的元素,则返回 1,否则返回 0。
#define m_index 16
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int fork_search(int a[], int search, int start, int end) {
if (start == end) {
if (*(a + end) == search) {
return 1;
}
return 0;
} else{
pid_t child = fork();
if (child == 0)
return fork_search(a, search, start, (start+end)/2);
else {
// creating the second son here
pid_t child2 = fork();
if (child2 == 0)
return fork_search(a, search, (start + end)/2+1, end);
}
}
}
int main(int argc, char* argv[]) {
int a[m_index] = {1, 12, 11, 5, 10, 6, 4, 9, 13, 2, 8, 14, 3, 15, 7};
printf("%d\n", fork_search(a, 12, 0, m_index-1));
return 0;
}
如何创建第二个儿子来搜索上半部分?如果是父亲,我可以简单地写return fork_search(a, search, (start + end)/2+1, end);,但是,我需要第二个儿子来做这件事。谢谢!
【问题讨论】:
-
你混淆了二叉搜索和二叉搜索树..!!
-
分叉后,您必须通过
exit()以状态 0 或 1 传递状态,父进程等待(wait()或waitpid())子进程并报告复合状态从孩子们那里。此外,这看起来总是会搜索所有内容,而不是一直消除一半的搜索范围。您必须等待第一个孩子完成,只有当它报告失败时,您才会启动第二个孩子。