2013-07-17 40 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);