【发布时间】:2021-03-09 17:50:06
【问题描述】:
我有一棵二叉树,其中每个节点的值为0或1,从root到叶子节点的每条路径代表一个一定长度的二进制字符串。该程序的目的是找到所有可能的二进制String(即从root 到叶子的所有可能路径)。现在我想将它并行化,以便它可以使用多个内核。我假设我需要以某种方式拆分分支节点上的工作负载,但我不知道从哪里开始。我正在查看ForkJoin 功能,但我不知道如何拆分工作然后合并它。
public class Tree{
Node root;
int levels;
Tree(int v){
root = new Node(v);
levels = 1;
}
Tree(){
root = null;
levels = 0;
}
public static void main(String[] args){
Tree tree = new Tree(0);
populate(tree, tree.root, tree.levels);
tree.printPaths(tree.root);
}
public static void populate(Tree t, Node n, int levels){
levels++;
if(levels >6){
n.left = null;
n.right = null;
}
else{
t.levels = levels;
n.left = new Node(0);
n.right = new Node(1);
populate(t, n.left, levels);
populate(t, n.right, levels);
}
}
void printPaths(Node node)
{
int path[] = new int[1000];
printPathsRecur(node, path, 0);
}
void printPathsRecur(Node node, int path[], int pathLen)
{
if (node == null)
return;
/* append this node to the path array */
path[pathLen] = node.value;
pathLen++;
/* it's a leaf, so print the path that led to here */
if (node.left == null && node.right == null)
printArray(path, pathLen);
else
{
/* otherwise try both subtrees */
printPathsRecur(node.left, path, pathLen);
printPathsRecur(node.right, path, pathLen);
}
}
/* Utility function that prints out an array on a line. */
void printArray(int ints[], int len)
{
int i;
for (i = 0; i < len; i++)
{
System.out.print(ints[i] + " ");
}
System.out.println("");
}
}
【问题讨论】:
标签: java parallel-processing tree binary depth-first-search