我的代码的目的是从数组导入treeNodes。问题是,即使在创建新的treeNodes时确保将root-> left和root-> right设置为NULL。
当我遍历树并最终到达树的叶子时,左右成员仍然不是NULL。
treeNode* import_treeNode(treeNode* root, int nodes[], int curr_i, int size){
if (curr_i < size){
treeNode* newNode = new treeNode;
root = newNode;
root->value = nodes[curr_i];
if (2 * curr_i + 1 < size){
root->left = import_treeNode(root->left, nodes, 2 * curr_i + 1, size);
} else {
root->left = NULL;
}
if (2 * curr_i + 2 < size){
root->right = import_treeNode(root->right, nodes, 2 * curr_i + 2, size);
} else {
root->right = NULL;
}
return root;
} else {
return NULL;
}
}
答案 0 :(得分:0)
当您分配给根节点时:
segment(L, S1, S2) :- stop(L, N1, S1), stop(L, N2, S2), N2>N1.
line_present_in_path(_, []) :- false.
line_present_in_path(L, [H|_]) :- segment(L, _, _) = H.
line_present_in_path(L, [_|T]) :- line_present_in_path(L, T).
path(S1, S2, [H]) :- segment(_, S1, S2) = H, H.
path(S1, S2, [H|T]) :- segment(L, S1, X) = H, H, \+line_present_in_path(L, T), path(X, S2, T).
您正在丢失传递给该函数的根节点。因此,例如:
?- path(station1, station4, [segment(line1, station1, station2),segment(line2, station2, station4)]).
true ;
false.
您传递给递归调用的左根无效。
也许您可以在整个函数中使用?- path(station1, station4, P).
P = [segment(line1, station1, station4)] ;
false.
而不是将其分配给根并使用根。