2017-04-25 3 views
0

ツリー構造を挿入/削除する関数を記述することになっていますが、プログラムを正しく実行するのが難しいです。ノードを挿入/削除するCプログラムの実行に問題があります

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); 
} 

と出力のようなものでなければなりません:ここではスケルトンコードがある

プロジェクト>:猫 - | ./bintree ABC XYZためにヌル2>は/ dev/

ABC

QWE

ASD

ZXC

QWE

プリントバイナリツリー

ノードasd

ノードは、ノードがZXC

プロジェクト>です

QWEです:私の挿入機能を書き込み、プログラムを実行した後、私は「印刷ツリーを実行している悩みを抱えているものの、いくつかの理由

プログラムの「オーダー」セクションを無限ループにすることなく、正常に入力を要求します。何か案は?一般algorithバイナリツリーを印刷するには

+0

を持っているものを使用すると、あなたのインデントを修正してください。 – ThingyWotsit

答えて

0

は(擬似コード)である:

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:あなたが

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

あなたの挿入機能はどのように見えますか? – hulud

+0

答えに感謝します!ことは、アカウント内の挿入機能がなくても、私はプログラムを正しく実行できません。 "insert(buf)"セクションを "printf("%s "、" s ");"のように置き換えても、 "cat - | /bintree abc xyz 2>/dev/null "を実行します。 –

関連する問題