2013-07-17 41 views
1

下面给出的代码是我写入用于插入二叉树的代码。该代码适用于根节点,但不适用于其子节点。我知道我必须在插入子元素的同时传递对根节点的引用,但不知道如何实现它。什么是改变?在二叉树中插入指针错误

#include <stdio.h> 
#include <stdlib.h> 

struct bintree 
{ 
int data; 
struct bintree *left; 
struct bintree *right; 
}; 

typedef struct bintree btree; 

btree* newnode(btree *node, int data) 
{ 
    node=(btree*)malloc(sizeof(btree)); 
    node->data=data; 
    node->left=NULL; 
    node->right=NULL; 
    return node; 
} 

btree* insert(btree *node, int data) 
{ 
    if(node==NULL) 
    { 
     return (newnode(node, data)); 
    } 
    else 
    { 
     if(data<=node->data) 
     { 
      insert(node->left, data); 
      return(node); 
     } 
     else 
     { 
      insert(node->right, data); 
      return(node); 
     } 
    } 
} 

int main() 
{ 
    btree *root=NULL; 
    root=insert(root, 5); 
    insert(root, 3); 
    insert(root, 6); 
    return 0; 
} 

在这种代码的节点,如果是空值,被发送到newnode功能,并被分配内存和数据。在其他情况下使用插入功能。

+0

请避免使用malloc'的'。改用'operator new'。 – Manu343726

回答

1

更改此:

if(data<=node->data) 
    { 
     insert(node->left, data); 
     return(node); 
    } 
    else 
    { 
     insert(node->right, data); 
     return(node); 
    } 

到:

if(data<=node->data) 
    { 
     node->left = insert(node->left, data); 
    } 
    else 
    { 
     node->right = insert(node->right, data); 
    } 
    return (node); 

也是在主代码应该是:

root = insert(root, 5); 
root = insert(root, 3); 
root = insert(root, 6);