尝试在 C 中为普通树构建广度优先搜索算法

Try to build a Breadth First Search algorithm for normal tree in C

我尝试为普通树建立一个广度优先搜索算法,一个节点可以有多个(可以超过两个)children。
我算法的 主要思想 是我遍历所有 first-kid,然后通过 get() 函数递归地遍历它们的 right-brother。所有结果都存储在二维 *char 数组 arr.

  1. 一路走下去:row++;col=0
  2. 兄弟们走对了:col++
  3. 往上重复步骤2。
    (好像我把father和children存到二维数组的时候失去了关系,怎么保持呢) 如果一切顺利(实际上不是,gcc 报告没有问题但没有输出),输出应该是这样的:
A
B C D
E F G

树结构:

struct node *head;
struct node { 
    struct node *firstKid;
    struct node *rightBro;
    char *token; 
};

主function:I忽略creat-tree函数,因为所有参数都是从另一个程序传递的。

int main() {
    int m=100,n=100;
    // creat-tree function ignored here, the root of the tree  would be head(used in get()func

    char ***arr = (char ***)malloc(n*sizeof(char **));
    for(int i=0;i<n;i++) arr[i] = (char **)malloc(m*sizeof(char*));
    get(head,0,0,arr);
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            printf("%s",arr[i][j]);
        }
    }

}

我的迭代器:

void get(struct node *node,int row,int col,char ***arr){ 
    struct node *kid;
    struct node *bro;
    if(node!=NULL){
        arr[row][col]=node->token;
        row=row+1;col=0;
        if(node->firstKid)get(node->firstKid,row,col,arr);
        else{
            bro = node->rightBro;
            while(bro!=NULL){
                col ++;
                arr[row][col]=bro->token;
                bro = node->rightBro;
            }
        }
    }
}

Breadth-first遍历:

  1. 创建一个 to-visit 队列。
  2. 将根添加到队列。
  3. 虽然队列不为空,
    1. 使一个节点出队。
    2. 访问出队节点。
    3. 将节点的子节点添加到队列中。

搜索是一样的,除了一旦找到感兴趣的节点就退出循环。

您没有队列(或任何用于此目的的队列)。你的一般方法是有缺陷的。事实上,您正在通过使用堆栈(通过递归)而不是队列来执行部分 depth-first 遍历。


我没有解决具体问题,因为您必须重写代码,而且您未能提供问题的演示。