二叉树安插函数的一个细节

二叉树插入函数的一个细节
本帖最后由 garbageam 于 2014-07-06 20:56:00 编辑
问题在注释里
int bitree_ins_left(BiTree *tree, BiTreeNode *node, const void *data)
{
  BiTreeNode *new_node, **position;        //这里为什么要二重指针?   *position不行吗?
  if( node == NULL )
  {
        if( bitree_size(tree) > 0 )
        return -1;
        position = &tree->root;
  }
  else
  {
        if( bitree_left(node) != NULL )
        return -1;
        position = &node->left;
  }
  /* Allocate storage for the node */
  new_node = (BiTreeNode *)malloc(sizeof(BiTreeNode));
  if( new_node == NULL )
         return -1;
  /* insert the node into the tree */
  new_node->data = (void *)data;
  new_node->left = NULL;
  new_node->right = NULL;
  *position = new_node;
  tree->size++;
  return 0;
}

------解决方案--------------------
如果不用二重指针,比如这么写:
BiTreeNode *position;
position = tree->root;
position = new_node;  // 这里只不过是把position指向了new_node,而 tree->root没有变化。
用了二级指针可以改变tree->root