C++ 递归二叉树函数
我正在尝试将数组中的项插入到树中。我的函数工作正常,创建的节点一直到树左侧的叶节点。问题是,当检测到更高级别的叶节点时,它应该递归返回,它只是完全停止构建树。代码如下:C++ 递归二叉树函数,c++,recursion,binary-tree,C++,Recursion,Binary Tree,我正在尝试将数组中的项插入到树中。我的函数工作正常,创建的节点一直到树左侧的叶节点。问题是,当检测到更高级别的叶节点时,它应该递归返回,它只是完全停止构建树。代码如下: void WLD::treeInsert(BSP_Node *tree_root, int node_number) { if ( tree_root == NULL ) { tree_root = new BSP_Node(); tree_root->node_number
void WLD::treeInsert(BSP_Node *tree_root, int node_number)
{
if ( tree_root == NULL )
{
tree_root = new BSP_Node();
tree_root->node_number = node_number;
tree_root->normalX = bsp_array[node_number].normal[0];
tree_root->normalY = bsp_array[node_number].normal[1];
tree_root->normalZ = bsp_array[node_number].normal[2];
tree_root->splitdistance = bsp_array[node_number].splitdistance;;
tree_root->region = bsp_array[node_number].region;
tree_root->left = bsp_array[node_number].left; //because the array starts at index 0
tree_root->right = bsp_array[node_number].right; //because the array starts at index 0
tree_root->left_node = NULL;
tree_root->right_node = NULL;
errorLog.OutputSuccess("Inserting new node: %i", node_number);
errorLog.OutputSuccess("Left node index: %i", bsp_array[node_number].left);
errorLog.OutputSuccess("Right node index: %i", bsp_array[node_number].right);
node_number++;
// Check for leaf nodes
if(tree_root->region != 0)
{
errorLog.OutputSuccess("This is a leaf node! Returning!");
return;
}
}
if ( tree_root->left > 0)
{
//tree_root->left_node = new BSP_Node();
errorLog.OutputSuccess("Left node not NULL, inserting it!");
treeInsert( tree_root->left_node, tree_root->left );
}
else if (tree_root->right > 0)
{
//tree_root->right_node = new BSP_Node();
errorLog.OutputSuccess("Right node not NULL, inserting it!");
treeInsert( tree_root->right_node = NULL, tree_root->right );
}
}
如您所见,当它检测到一个叶节点时,它应该返回到调用函数(这个函数只是在更接近节点的级别上)。有人有什么建议吗
if ( tree_root->left > 0) {
// implementation
}
else if (tree_root->right > 0) {
// implementation
}
这不应该是两个独立的if语句,而不是if/else吗?否则它只做一个或另一个方面,而不是两个方面。tree\u root->left>0应该写为tree\u root->left!=NULL(这只是让它更清楚)。谢谢。这正是答案!