从数组插入treeNodes会导致插入“空”节点

时间:2018-11-11 06:15:29

标签: c++ data-structures

我的代码的目的是从数组导入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;
    }

}

1 个答案:

答案 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. 而不是将其分配给根并使用根。