2014-06-09 1 views
-3
#include <stdio.h> 
#include <stdlib.h> 
struct node 
{ 
int data; 
struct node *left; 
struct node *right; 
}; 
typedef struct node* LIST; 
LIST getnode(int dat) 
{ 
LIST temp=(LIST)malloc(sizeof(LIST *)); 
temp->data=dat; 
temp->left=NULL; 
temp->right=NULL; 
return temp; 
} 
void preorder(struct node *tree) 
{ 
if(tree==NULL) 
    return; 
printf("%d",tree->data); 
preorder(tree->left); 
preorder(tree->right); 

} 
void inorder(LIST tree) 
{ 
if(tree==NULL) 
return; 
inorder(tree->left); 
printf("%d",tree->data); 
inorder(tree->right); 
} 
void postorder(LIST tree) 
{ 
if(tree==NULL) 
    return; 
postorder(tree->left); 
postorder(tree->right); 
printf("%d",tree->data); 
} 
int main() 
{ 
int ch; 
LIST root=NULL; 
root=getnode(2); 
printf("hi"); 
root->left=getnode(3); 
root->right=getnode(5); 
root->right->left=getnode(4); 
root->right->right=getnode(9); 
printf("How would you like to traverse the tree?? 
\n1.Preorder\n2.Inorder\n3.Postorder\nENTER YOUR CHOICE\n");   
scanf("%d",&ch); 
switch(ch) 
{ 
case 1: 
    preorder(root); 
    break; 
case 2: 
    inorder(root); 
    break; 
case 3: 
    postorder(root); 
    break; 
} 
} 

내 프로그램 실행이 중지됩니다. 다른 트리 순회를 인쇄하고 싶습니다. 위의 code.program의 오류가 어떤 곳에서 실행 중이고 멈추는 지 설명하십시오. 스위치 케이스 내에서 명령문을 실행하려고 시도하고 있지만 중지됩니다. 솔루션을 제안하십시오.프로그램이 실행 중이고 일부 장소에서 중단됩니다.

+0

코드를 들여 씁니다. – user694733

+0

코드에 따르면 한 번에 하나의 유형의 트레 버셜 만 인쇄 할 수 있습니다. 멈추는 자세를 주시겠습니까? – ANjaNA

답변

1

당신은 당신이 포인터 LIST *의 크기 만 할당된다

LIST temp=(LIST)malloc(sizeof(LIST *)); 

노드 라인 라인에 대한 메모리를 할당합니다. 해당 줄 바꾸기 :

LIST temp=(LIST)malloc(sizeof(struct node)); 
관련 문제