2017-04-25 1 views
0

J'ai une affectation, où je suis censé écrire des fonctions pour insérer/supprimer des structures d'arbre, mais j'ai du mal à exécuter le programme correctement. Voici le code squelette:C programme pour insérer/supprimer des nœuds, avoir du mal à fonctionner

typedef struct tree tree; 

#define MAXWORD 26 

struct tree{ 
struct tree *b4; 
struct tree *after; 
char word[MAXWORD]; 
}; 

void Insert(char *); 
void Delete(char *); 

#ifndef MAIN 
extern tree *root; 
#endif 

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define MAIN 1 
#include "tree.h" 
void printtree(); 
tree *root=NULL; 

main(int argc, char **argv) 
{ 
tree *node; 
char buf[MAXWORD]; 
extern tree *root; 
tree *p; 

while((scanf("%s",buf))>0) 
    Insert(buf); 
while(argc-->1) 
    Delete(argv[argc]); 

printf("Print binary tree in order\n"); 
if(root!=NULL) 
    printtree(root); 
} 

void printtree(tree *root){ 

if(root->b4!=NULL) 
    printtree(root->b4); 
printf("Node is %s \n",root->word); 
if (root->after!=NULL) 
    printtree(root->after); 
} 

et la sortie devrait être quelque chose comme:

projet

>: cat - | ./bintree abc xyz 2>/dev/null

abc

qwe

asd

zxc

qwe

impression d'arbre binaire pour

Node est asd

Node est un projet qwe

nœud est zxc

>:

Pour une raison quelconque, mais après avoir écrit ma fonction d'insertion et l'exécution du programme, je vais avoir du mal à courir le « arbre d'impression commander "section du programme avec succès sans qu'il s'agisse d'une boucle sans fin, demandant des commentaires. Des idées?

+0

S'il vous plaît fixer votre empreinte. – ThingyWotsit

Répondre

0

Pour imprimer un arbre binaire, le algorith général est (pseudo-code):

def inOrder_treeWalk(node) //define function that takes a node 
    if(node) //if the node is not Null 
     inOrder_treeWalk(node.left) //recursive call with left child 
     print node.key //print the key of this frame 
     inOrder_treeWalk(node.right) //recursive call with right child 

EDIT: en utilisant ce que vous avez

void printtree(tree *node){ 
    if(node){ 
     printtree(node->b4); 
     printf("Node is %s \n", node->word); 
     printtree(node->after); 
    } 
} 
+0

À quoi ressemble votre fonction d'insertion? – hulud

+0

merci pour la réponse! la chose est, même sans la fonction d'insertion en compte, je ne peux pas exécuter correctement le programme. même en remplaçant la section "Insert (buf)" avec quelque chose comme "printf ("% s "," s ");", je continue à obtenir une boucle sans fin en utilisant "cat - | ./bintree abc xyz 2>/dev/null "à exécuter. –