在实现二叉树的各种操作中,采用先序遍历时出现问题:
#include<stdio.h>
#include<stdlib.h>
//#define NULL ((void *)0)
//using namespace std;
int K = 0;
typedef struct treeNode{
int num;
treeNode *lchild;
treeNode *rchild;
}treeNode,*viTree;
void InitviTree(viTree &T){ //初始化
T = (treeNode *)malloc(sizeof(treeNode));
//T = new viTree;
//T -> num = 0;
T -> lchild = NULL;
T -> rchild = NULL;
}
void createviTree(viTree T){ //创建
InitviTree(T);
int n;
scanf("%d",&n);
if(n != -1){
//printf("kkk");
//printf("%d",n) ;
T -> num = n;
//printf("%d",T->num);
createviTree(T -> lchild);
//printf("bbb"); //调试语句
createviTree(T -> rchild);
//printf("ccc"); //调试
}
else{
//printf("ddd");
T = NULL;
return;
}
}
void printviTree(viTree T){ //出现问题
if(T){
return ;
}
else{
K++;
printf("第%d个数字为:%d\n",K,T->num);
printviTree(T->lchild);
printviTree(T->rchild);
}
}
int firstFindTree(viTree T,int k){ //出现问题
if(T != NULL){
K++;
if(K == k){
return T -> num;
}
else{
firstFindTree(T -> lchild,k);
firstFindTree(T -> rchild,k);
}
}
}
int main(){
viTree Tree;
//InitviTree(&Tree);
printf("请输入二叉树:\n");
createviTree(Tree);
printf("二叉树为:\n");
printviTree(Tree);
int k;
/*printf("请输入要查询的位置:");
scanf("%d",&k);
printf("第%d个位置的值为%d",k,firstFindTree(Tree,k));*/
}
在创建后,遍历二叉树准备输出时,在控制台直接结束了程序,debug时在printviTree这一条直接跳过去了,然后程序就结束了。
求解答问题。