2011-05-31 144 views
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); 
    } 

} 

正如你所看到的,当它检测到的叶节点,它应该返回给调用函数(此功能,但在水平接近的节点有没有人有任何建议。 ?

+1

tree_root->左> 0也许应该是写成tree_root-> left!= NULL(它只是让它更清晰) – 2011-05-31 09:06:39

回答

2
if (tree_root->left > 0) { 
    // implementation 
} 
else if (tree_root->right > 0) { 
    // implementation 
} 

不应该这是两个独立的if语句,而不是的if/else?否则,它不仅一方或另一方面,但不能两者兼得。

+0

谢谢。 e答案! – 2011-05-31 09:12:54