在二叉搜索树中插入节点(C)

时间:2015-11-15 01:11:49

标签: c binary-search-tree

我正在尝试编写一个函数来将节点插入到二叉搜索树中,我有以下内容:

npm test # PowerShell
#...

TAP version 13
# find rc file in third searched dir, with a package.json lacking prop
ok 1 should be equal
ok 2 first dir: checked /a/b/c/d/e/f/package.json
ok 3 first dir: checked /a/b/c/d/e/f/.foorc
# ...

1..72
# tests 72
# pass  72

# ok

npm : 
At line:1 char:1
+ npm test # PowerShell
+ ~~~~~~~~
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

C:\projects\cosmiconfig\test\a\b\foo.config.js:1
quire, module, __filename, __dirname) { module.exports = { found: true: false,
                                                                      ^

Command executed with exception: C:\projects\cosmiconfig\test\a\b\foo.config.js:1
quire, module, __filename, __dirname) { module.exports = { found: true: false,
                                                                      ^

我知道这有效,如果我想在根节点typedef struct Node { int key; struct Node *left; struct Node *right; } Node; Node *createNode(int key) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode->key = key; newNode->left = NULL; newNode->right = NULL; return newNode; } Node *insert(Node *node, int key) { if (node==NULL) { node = createNode(key); } else { if (node->key > key) { node->left = insert(node->left, key); } else { node->right = insert(node->right, key); } } return node; } int main(int argc, char* argv[]) { Node *root = NULL; root = insert(root, 10); return 0; } 的树中插入5,我可以写root。我的问题是,如何编写root = insert(root, 5);的另一个版本,只需insert即可实现同样的目标?我试过以下但没有用。

insert(root, 5);

这有什么问题,为什么这不起作用?任何指针(没有双关语)都会非常感激!

1 个答案:

答案 0 :(得分:3)

对我来说,你的第一个解决方案很优雅。

现在,如果要在不利用返回值的情况下插入,那么可以使用指向指针的方法。

类似的东西:

void insert(Node ** node, int key)
{
    if (*node == NULL)
      *node = createNode(key);
    else if ((*node)->key > key)
      insert(&(*node)->left, key);
    else
      insert(&(*node)->right, key);
}

电话会是

insert(&root, 10);