二进制树的过程

时间:2014-10-11 22:13:23

标签: c recursion process fork binary-tree

我正在尝试创建一个递归函数,该函数使用fork()创建父子进程的二叉树结构,给定树的级别数。到目前为止,我有:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>


void createTree(int level){

    pid_t leftson;
    pid_t rightson;

    if (level > 1){


        if ((leftson = fork()) < 0) {
             perror("fork:");
             exit(1);
        }   // Create the first son

        if (leftson == 0){
            createTree(level--);
        } // If I'm the left son, continue biulding the structure

        else { // I'm father

            if ((rightson = fork()) < 0) {
                 perror("fork:");
                 exit(1);
            } // Create right son

            if (rightson == 0){
                createTree(level--);
            } // I'm right, continue building

            else printf("created my 2 sons"); // I'm the father

        } 




    }
    else if (level == 1){
        printf("end of tree");
    }   




}


void main(){

    createTree(3);

}

问题是程序进入创建进程的无限循环,因为级别变量永远不会减少,我正在考虑使用管道但我不知道如何在有这么多进程时使用它们。

另外,有没有办法像bash那样提供新流程参数?而不是使用管道?

1 个答案:

答案 0 :(得分:1)

有时尝试使用createTree(level-1);代替createTree(level--);,这会在递归调用中导致无限循环。