2017-10-18 7 views
-2

こんにちは、私はBSTに新しいノードを挿入することに疑念があります。 addNodeモジュールでは、BSTに要素を挿入しようとしていますが、新しいノードを追加するたびに、最初にのメインから渡された同じルートノードにツリーが追加されています。バイナリ検索ツリーのトラバーサル

これは私が書いたコードです。

#include<stdio.h> 
#include<stdlib.h> 
#include<cstdio> 
#include<iostream> 
using namespace std; 
struct node 
{ 
    int data; 
    struct node *left; 
    struct node *right; 
}; 
struct node* newNode(int data) 
{ 
    node* temp = (node*)malloc(sizeof(struct node)); 
    //struct temp = new node; 
    temp->data = data; 
    temp->left = NULL; 
    temp->right = NULL; 
    return(temp); 
}; 
int addNode(node *dest, node *root) 
{ 
    if(root == NULL) 
    { 
     cout<<"adding data to node for "<< dest->data<<endl; 
     root = dest; 
     cout<<"ROOT VALUE = root->data "<<root->data<<endl; 
     return 1; 
    } 
    if(dest->data > root->data) 
    { 
     cout<<"Traverse right for "<<dest->data<<endl; 
     addNode(dest, root->right); 
    } 
    else if(dest->data < root->data) 
    { 
     cout<<"Traverse left for "<<dest->data<<endl; 
     addNode(dest, root->left); 
    } 
} 
void printNodes(node *root) 
{ 
    if(root != NULL) 
    { 
     printNodes(root->left); 
     if(root->left != NULL && root->right != NULL) 
      std::cout<< root->data <<" "; 
     printNodes(root->right); 
    } 
} 
int main() 
{ 
    int i, j, k, flag; 
    int arr[6] = {4, 2,8, 1, 0, 10}; 
    node *start = newNode(arr[0]); 
    for(i = 1; i < 6; i++) 
    { 
     node *newOne = newNode(0); 
     newOne->data = arr[i]; 
     cout<<"NODE DATA - start->data "<<start->data; 
     if(addNode(newOne, start)) 
      std::cout<<"\nNode added"<<endl; 
    } 
    printNodes(start); 
    return 1; 
} 

私は木のコンセプトだけでなく、ポインタコンセプトにもかなり新しいです。何か助けていただければ幸いです。

+0

ポインタには特別なものは何もありません。ポインタパラメータへの代入は、 'int'パラメータへの代入と同じです。 – molbdnilo

答えて

0

...しかし、毎回、あなたが

として、ここで、同じルートに常にそれを追加しているので、これがあるのと同じルート ノード

に追加された新しいノードを追加しながら、

if(addNode(newOne, start)) 

startは常に同じです。

start = addNode(newOne,start); 

私はそれを実装するためにあなたにそれを残しておきます:あなたは、新しいルートを返すと、そのようにそれを呼び出すaddNode作ることができます。パラメータは常にCの値によって渡され

注意++(あなたは、参照渡していない限り)、このように方法、root = dest;内部パラメータを変更、mainstartに影響を及ぼしません。

関連する問題