Binärbaum



  • Hallo,
    ich habe einen vorgegebenen Binärbaum und soll untersuchen, wie oft z.B. 'e' darin vorkommt. Dann soll ich ihn Inorder ausgeben.
    Mein Code:

    #include<stdio.h>
    #include<stdlib.h>
    
    struct node
    {
      struct node *left;
      struct node *right;
      char chr;
    };
    
    /*struct node *mkNode(char chr, struct node *1, struct node *r);
    struct node *mkLeaf(char chr);
    void printInorder(struct node * n);
    int countChr(char chr, struct node* root, int count);*/
    
    //Knoten-/Blatt-Ersteller
    
    struct node *mkNode(char chr, struct node *1, struct node *r)
    {
      struct node *n = NULL;
      if((n==malloc(sizeof(struct node)))!=NULL)
        {
          n->chr = chr;
          n->left = 1;
          n->right = r;
          return n;
        }
      else
        {
          return NULL;
        }
    }
    struct node *mkLeaf(char chr)
    {
      return mkNode(chr, NULL, NULL);
      }
    
    //rekursive Zaehlfunktion
    int countChr(char chr, struct node* n, int count)
    {
      //Blatt erreicht - bisherige Anzahl aus diesem Pfad zurueckgeben
      if(n==NULL)
        return count;
      if(n->chr ==chr)
        {
          count++;
        }
      //Berechnung des counts aus: bekanntem count im Knoten und der Anazhl der ermittelten Übereinsstimmungen als den Unterpfaden
      return count + (countChr(chr, n->left, count) - count)+(countChr(chr, n->right, count)-count);
    }
    
    //Ausgabe in Inorder ->links runter: ausgeben, hoch -> rechts runter: ausgeben, hoch
    void printInorder(struct node * n)
    {
      if(n==NULL) 
        return;
      printInorder(n->left);
      printf("%c", n->chr);
      printInorder(n->right);
    }
    
    int main(int argc, char *argv[])
    {
     struct node *root = mkNode(' ',
    			    mkNode('n',
    				   mkNode(' ',
    					  mkNode('e', mkLeaf('S'),
    						 mkNode('i', NULL, mkLeaf('n'))),
    					  mkNode('e', mkNode('o', NULL, mkLeaf('d')),
    						 mkNode('r', NULL, mkLeaf(' ')))),
    				   mkNode(' ',
    					  mkNode('c', mkLeaf('i'),
    						 mkNode('h', NULL, mkLeaf('t'))),
    					  mkNode('i', mkNode('s', NULL, mkLeaf('e')),
    						 mkNode('n', NULL, mkLeaf(','))))),
    			    mkNode('e',
    				   mkNode('i',
    					  mkNode('a', mkLeaf('d'),
    						 mkNode('s', NULL, mkLeaf(' '))),
    					  mkNode(' ', mkNode('s', NULL, mkLeaf('t')),
    						 mkNode('h', NULL, mkLeaf('i')))),
    				   mkNode(' ',
    					  mkNode('d', mkNode('r', NULL, mkLeaf(' ')),
    						 mkNode('i', NULL, mkLeaf('e'))),
    					  mkNode('a', mkNode('F', NULL, mkLeaf('r')),
    						 mkNode('g', NULL, mkLeaf('e'))))));
    
     char chr;
     printf("Die Anzahl welches Buchstaben soll gezaehlt werden: ");
     scanf("%c", &chr);
     printf("%c kommt %d mal vor in\n", chr, countChr(chr, root, 0));
    
     printInorder(root);
     return 0;
    }
    

    Aber ich bekomme immer die Fehlermeldung:
    "expected ';' ',' '.' or ')' befor numeric constant" in dieser Zeile:

    struct node *mkNode(char chr, struct node *1, struct node *r)
    

    Kann mir vielleicht jemand weiterhelfen?
    lg
    BambiPunkt



  • 1 ist kein gültiger Bezeichner.



  • Eeeeek! Ich hab nie einen Baum in C geschrieben, aber muss das wirklich so besch ... eiden aussehen wie das da oben!?


  • Mod

    Swordfish schrieb:

    Eeeeek! Ich hab nie einen Baum in C geschrieben, aber muss das wirklich so besch ... eiden aussehen wie das da oben!?

    Nein, natürlich nicht. Der Code kann auch so aussehen, wie in allen anderen Sprachen auch.



  • Wart mal ... wenn ich einen Baum schreiben geh ... kritisiert ihn dann?


  • Mod

    Swordfish schrieb:

    Wart mal ... wenn ich einen Baum schreiben geh ... kritisiert ihn dann?

    Fremden Code zu kritisieren ist doch die Lieblingsbeschäftigung fast aller regelmäßigen Leser. Wir sind in freudiger Erwartung.



  • Swordfish schrieb:

    Wart mal ... wenn ich einen Baum schreiben geh ... kritisiert ihn dann?

    Ich höchstens wenn der Baum nicht beim Lesen weh tut und der Autor anscheinend noch was lernen will. Also sehr selten.


  • Mod

    volkard schrieb:

    Swordfish schrieb:

    Wart mal ... wenn ich einen Baum schreiben geh ... kritisiert ihn dann?

    Ich höchstens wenn der Baum nicht beim Lesen weh tut und der Autor anscheinend noch was lernen will. Also sehr selten.

    Und was ist hier das Urteil? Der Fragesteller ist ein Unbekannter, der Code ist stellenweise sehr ordentlich, stellenweise schlimm. Und die Art des Fehlers deutet irgendwie darauf hin, als wären Teile des Codes (die ordentlichen?) irgendwo von Hand abgeschrieben worden. Ich weiß gar nicht, ob ich sagen soll, dass in Zeile 21 noch ein subtiler, aber folgenschwerer Fehler steckt, durch den das Programm letztlich gar nichts macht 😉 .

    Sein oder nicht sein, das ist hier die Frage 😃



  • volkard schrieb:

    Swordfish schrieb:

    Wart mal ... wenn ich einen Baum schreiben geh ... kritisiert ihn dann?

    Ich höchstens wenn der Baum nicht beim Lesen weh tut und der Autor anscheinend noch was lernen will. Also sehr selten.

    Ähem. Du solltest eigentlich wissen, daß ich kein hoffnungsloser Fall bin, Volki.

    @SeppJ: Sein! Auf jeden Fall! ... for now that is ...


Anmelden zum Antworten