विवरण केवल पिछले एक में प्रवेश किया के लिए बाहर प्रिंट कर रहा है

वोट
1

मैं काफी सी के लिए नया हूँ और मैं सी में एक द्विआधारी पेड़ जो एक संख्या है और एक स्ट्रिंग की दुकान और फिर उन्हें जैसे प्रिंट होगा लागू करने के लिए कोशिश कर रहा हूँ

1 : Bread
2 : WashingUpLiquid
etc.

कोड मैं अब तक है:

#include <stdio.h>
#include <stdlib.h>
#define LENGTH 300

struct node {
 int data;
 char * definition;
 struct node *left;
 struct node *right;
};

struct node *node_insert(struct node *p, int value, char * word);

void print_preorder(struct node *p);

int main(void) {
  int i = 0;
  int d = 0;
  char def[LENGTH];
  struct node *root = NULL; 

  for(i = 0; i < 2; i++)
  {
    printf(Please enter a number: \n);
    scanf(%d, &d);
    printf(Please enter a definition for this word:\n);
    scanf(%s, def);
    root = node_insert(root, d, def);
    printf(%s\n, def);
  }

  printf(preorder : );
  print_preorder(root);
  printf(\n);

  return 0;
}

struct node *node_insert(struct node *p, int value, char * word) {
  struct node *tmp_one = NULL;
  struct node *tmp_two = NULL;

  if(p == NULL) {
    p = (struct node *)malloc(sizeof(struct node));
    p->data = value;
    p->definition = word;
    p->left = p->right = NULL;
  }
  else {
    tmp_one = p;
    while(tmp_one != NULL) {
      tmp_two = tmp_one;
      if(tmp_one->data > value)
        tmp_one = tmp_one->left;
      else
        tmp_one = tmp_one->right;
    }

    if(tmp_two->data > value) {
      tmp_two->left = (struct node *)malloc(sizeof(struct node));
      tmp_two = tmp_two->left;
      tmp_two->data = value;
      tmp_two->definition = word;
      tmp_two->left = tmp_two->right = NULL;
    }
    else {
      tmp_two->right = (struct node *)malloc(sizeof(struct node)); 
      tmp_two = tmp_two->right;
      tmp_two->data = value;
      tmp_two->definition = word;
      tmp_two->left = tmp_two->right = NULL;
    }
  }

  return(p);
}

void print_preorder(struct node *p) {
  if(p != NULL) {
    printf(%d : %s\n, p->data, p->definition);
    print_preorder(p->left);
    print_preorder(p->right);
  }
}

फिलहाल इसके लिए काम करने लगता है intरों लेकिन वर्णन हिस्सा केवल प्रवेश किया पिछले एक के लिए बाहर प्रिंट करता है। मुझे लगता है इस पर संकेत के साथ कुछ है charसरणी, लेकिन मैं कोई भाग्य यह काम करने के लिए हो रही थी। कोई भी विचार या सलाह?

23/03/2010 को 00:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

तुम हमेशा डीईएफ़ में एक scanf कर रहे हैं और फिर अपने डालने दिनचर्या जो सिर्फ सूचक डीईएफ़ बचाता है कि गुजर। तो, के बाद से अपने प्रविष्टियों के सभी डीईएफ़ बफर को इंगित, वे सभी बिंदु जो कुछ भी करने के लिए पिछले स्ट्रिंग आपको लगता है कि बफर में संग्रहीत किया गया था।

आप अपने स्ट्रिंग द्विआधारी पेड़ नोड में नकल करने के लिए एक सूचक कॉपी और जगह की जरूरत है।

23/03/2010 को 01:00
का स्रोत उपयोगकर्ता

वोट
1

समस्या यह है कि आप स्ट्रिंग के लिए एक ही बफर का उपयोग कर रहे है। सूचना अपने struct एक चार के लिए सूचक रखा है, और आप उस सूचक के रूप में हर बार एक ही चार सरणी गुजर रहे हैं।

जब आप फोन scanfबफर पर, आप डेटा यह, के लिए नहीं सूचक ही बताते हैं बदल रहे हैं।

एक struct करने के लिए इस पर आवंटित करने से पहले इसे ठीक करने के, आप उपयोग कर सकते हैं strdup । तो कोड की लाइनें बन जाएगा

tmp_*->definition = strdup(word);

ध्यान रखें कि चार सरणी strdup द्वारा दिया एक बार आप इसे पूरा कर मुक्त कर दिया जाना चाहिए रखें, अन्यथा आप एक रिसाव होगा।

23/03/2010 को 01:03
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more