OpenMP task 学习求助

2018-04-20 14:24:03 +08:00
 liukecai8

此处需要使用 task 来进行中序二叉树遍历,期望输出结果是 A=B/C+D*E-F 但是实际输出却不对,求助

#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
#include <string.h>

typedef struct BitNode
{
	char data;
	struct BitNode *lchild,*rchild;
} BitNode;

void midorder(BitNode *p)
{
	if(p->lchild) 
	{
#pragma omp task
		midorder(p->lchild);
	}
#pragma omp taskwait
	{
		printf("%c", p->data);
	}
	if(p->rchild)
	{
#pragma omp task
		midorder(p->rchild);
	}
}

int main (int argc, char **argv)
{
	BitNode *tree;
	BitNode a,b,c,d,e,f,eq,mi,mu,di,pl;
	a.data='A';a.lchild=0;a.rchild=0;
	b.data='B';b.lchild=0;b.rchild=0;
	c.data='C';c.lchild=0;c.rchild=0;
	d.data='D';d.lchild=0;d.rchild=0;
	e.data='E';e.lchild=0;e.rchild=0;
	f.data='F';f.lchild=0;f.rchild=0;
	eq.data='=';eq.lchild=&a;eq.rchild=&mi;
	mi.data='-';mi.lchild=&mu;mi.rchild=&f;
	mu.data='*';mu.lchild=&di;mu.rchild=&e;
	di.data='/';di.lchild=&b;di.rchild=&pl;
	pl.data='+';pl.lchild=&c;pl.rchild=&d;
	tree=&eq;
	omp_set_num_threads (4);
#pragma omp parallel
#pragma omp single
		midorder(tree);
	printf("\n");
}
1487 次点击
所在节点    C
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX