BiTree ifNine(BiTree T){
if(T != NULL){
if(T->data == 9){
return T;
} else if(T->data < 9){
return ifNine(T->rChild);
} else if(T->data > 9){
return ifNine(T->lChild);
}
}
}
上面这段代码无论加不加return结果都是正确的,这是为什么呢?
以下是完整代码
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <string.h>
typedef struct BiTNode {
int data;
struct BTnode *lChild;
struct BTnode *rChild;
} BiTNode, *BiTree;
BiTree CreatBiTree() {
BiTree T;
int num;
scanf("%d", &num);
if (num == -1) {
T = NULL;
} else {
T = (BiTNode *) malloc(sizeof(BiTNode));
T->data = num;
T->lChild = CreatBiTree();
T->rChild = CreatBiTree();
}
return T;
}
BiTNode *InsertL(BiTNode *parent, int num) {
BiTNode *ret;
if (parent->lChild == NULL) {
ret = parent->lChild = (BiTNode *) malloc(sizeof(BiTNode));
ret->data = num;
ret->lChild = NULL;
ret->rChild = NULL;
parent->lChild = ret;
return ret;
} else {
BiTNode *tempP = parent->lChild;
ret = (BiTNode *) malloc(sizeof(BiTNode));
ret->data = num;
ret->lChild = tempP;
ret->rChild = NULL;
parent->lChild = ret;
return ret;
}
}
BiTNode *InsertR(BiTNode *parent, int num) {
BiTNode *ret;
if (parent->rChild == NULL) {
ret = parent->rChild = (BiTNode *) malloc(sizeof(BiTNode));
ret->data = num;
ret->lChild = NULL;
ret->rChild = NULL;
parent->rChild = ret;
return ret;
} else {
BiTNode *tempP = parent->rChild;
ret = (BiTNode *) malloc(sizeof(BiTNode));
ret->data = num;
ret->rChild = tempP;
ret->lChild = NULL;
parent->rChild = ret;
return ret;
}
}
void deleteAll(BiTNode *node) {
if (node != NULL) {
deleteAll(node->rChild);
deleteAll(node->lChild);
free(node);
}
}
void DeleteL(BiTNode *node) {
if (node->lChild != NULL) {
BiTNode *tempP = node->lChild;
deleteAll(tempP);
node->lChild = NULL;
}
}
void DeleteR(BiTNode *node) {
if (node->rChild != NULL) {
BiTNode *tempP = node->rChild;
deleteAll(tempP);
node->rChild = NULL;
}
}
BiTree Search(BiTree T, int num) {
}
BiTree ifThree(BiTree T){
if(T != NULL){
if(T->data == 9){
return T;
} else if(T->data < 9){
return ifThree(T->rChild);
} else if(T->data > 9){
return ifThree(T->lChild);
}
}
}
void TraverseQ(BiTree T) {
if (T != NULL) {
printf("%d", T->data);
TraverseQ(T->lChild);
TraverseQ(T->rChild);
}
}
void TraverseZ(BiTree T) {
if (T != NULL) {
TraverseZ(T->lChild);
printf("%d", T->data);
TraverseZ(T->rChild);
}
}
int main() {
BiTree T = CreatBiTree();
TraverseQ(T);
printf("\n");
TraverseZ(T);
printf("\n");
BiTNode *temp = ifThree(T);
printf("%d",temp->data);
return 0;
}