2017-07-29 4 views
-1

私は新人プログラマーです。私は、バイナリ検索ツリーの挿入とプリオーダートラバーサルに関するプログラムを作った。しかし問題は、予約注文トラバーサル機能が何も印刷していないことです。私が木を横断しようとすると、何も印刷されません。あなたの関数にではなく、参照することによって値によってrootを渡しているためですそれプリオーダーがツリーを横切っている間に出力されない

#include<iostream> 
#include<stdio.h> 
using namespace std; 
struct node 
{ 
    int data; 
    struct node* left; 
    struct node* right; 
}; 

void insert(struct node * root,int k) 
{ 
struct node *n,*pre; 
n=(struct node *)malloc(sizeof(struct node)); 
n->left=NULL; 
n->right=NULL; 
n->data=k; 
if(root==NULL) 
root=n; 
else 
{ 
pre=root; 
while(pre!=NULL) 
{ 
    if(k<pre->data) 
    { 
     if(pre->left==NULL) 
      { 
      pre->left=n; 
      } 
     pre=pre->left; 
    } 
    else if(k>pre->data) 
    { 
     if(pre->right==NULL) 
      { 
      pre->right=n; 
      } 
     pre=pre->right; 
    } 

} 

    } 
} 
void traversal(struct node * root) 
{ 
if(root!=NULL) 
{ 
    cout<<root->data<<endl; 
    traversal(root->left); 
    traversal(root->right); 
} 

} 

int main() 
{ 
    struct node *root=NULL; 
    int i,data; 
    while(1) 
    { 
    cout<<"1.Enter into tree"<<endl; 
    cout<<"2.traverse"<<endl; 
    cout<<"3.exit"<<endl; 
    cin>>i; 
    switch(i) 
    { 
     case 1:cout<<"input a number:"; 
       cin>>data; 
       insert(root,data); 
       break; 
     case 2:cout<<"The elements of the tree:"<<endl; 
       traversal(root); 
       break; 
     case 3:cout<<"Exiting.... || bye!"; 
       exit(0);  
       break; 
    } 
    } 
    } 

答えて

0

...私はこの問題を修正しようとしたが、残念ながら、私はそれを修正することができませんでした...助けてください。あなたのinsertの定義は次のようにする必要があります:あなたが実際にやっている

void insert(struct node*& root,int k) 

rootに機能するCOPYを通過しているので、その実際の値は更新されることはありません。

関連する問題