0
我想從我的數組中插入項目到我的樹中。我的函數工作正常,並一直創建節點到樹的左側的葉節點。問題在於,當檢測到更高級別的葉節點時應該遞歸地返回,它只是完全停止構建樹。下面是代碼:遞歸二叉樹函數
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);
}
}
正如你所看到的,當它檢測到的葉節點,它應該返回給調用函數(此功能,但在水平接近的節點有沒有人有任何建議。 ?
tree_root->左> 0也許應該是寫成tree_root-> left!= NULL(它只是讓它更清晰) – 2011-05-31 09:06:39