이진 트리를 생성하여 선주문 순회로 트래버스하고 재귀 적 방법을 사용하고 싶습니다. 이 코드는 컴파일 할 수는 있지만 제대로 실행되지 않으며 어쩌면 CreateBitree()
함수를 완료 할 수 없다는 것을 알았지 만 어디에 문제가 있는지 알 수 없습니다.C에서 재귀 적으로 이진 트리를 만들고 트래버스하기
#include <stdio.h>
#include <malloc.h>
typedef struct BiNode{
int data;
struct BiNode *lchild;
struct BiNode *rchild; //left and right child pointer
}BiNode;
int CreateBiTree(BiNode *T);
int TraverseBiTree(BiNode *T);
int main() {
BiNode *t;
CreateBiTree(t);
TraverseBiTree(t);
return 0;
}
int CreateBiTree(BiNode *T) { //create a binary tree by preorder traversal
char tmp;
scanf("%c", &tmp);
if(tmp == ' ')
T = NULL;
else {
T = (BiNode *)malloc(sizeof(BiNode));
T -> data = tmp;
CreateBiTree(T -> lchild);
CreateBiTree(T -> rchild);
}
return 1;
}
int TraverseBiTree(BiNode *T) { //traverse a binary tree by preorder traversal
if(T != NULL) {
printf("%c\n", T -> data);
TraverseBiTree(T -> lchild);
TraverseBiTree(T -> rchild);
}
return 1;
}
, 다음은 여전히 입력에 저를 보자, 나는 TraverseBiTree()
생각 함수가 실행되지 않았습니다.
작동하지 않는다고 할 때 ... 무슨 d 너 그 뜻이야? 틀렸어? 세그멘테이션 오류? 다른 것? – FDinoff
* value *에 의해 포인터 값을 CreateBiTree에 전달하고 있습니다. 호출자 측에서 포인터를 업데이트하지 않습니다 (자체 포함). – WhozCraig