创建并输入二叉树时,只能输入一个元素,即只能添加根root。
1.代码如下:
#include<stdio.h>
#include<stdlib.h>
int K = 0;
typedef struct viTree{
int num;
viTree *lchild;
viTree *rchild;
}viTree;
void InitviTree(viTree *T){ //初始化
T = (viTree *)malloc(sizeof(viTree));
//T -> num = NULL;
T -> lchild = NULL;
T -> rchild = NULL;
}
void createviTree(viTree *T){ //创建
//printf("aaa");
int n;
scanf("%d",&n);
if(n != -1){
T -> num = n;
createviTree(T -> lchild);
printf("bbb"); //调试语句
createviTree(T -> rchild);
printf("ccc"); //调试
}
else{
printf("ddd");
T = NULL;
return;
}
}
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);
int k;
printf("请输入要查询的位置:");
scanf("%d",&k);
printf("第%d个位置的值为%d",k,firstFindTree(&Tree,k));
}
2.在控制台输入
- 创建root=2 ,lchild=3,rchild=4,程序直接结束了
- 只有创建root=2,lchild=-1,rchild=-1即根的左右子树都为空时才能正常运行
不知道是什么原因,用二重指针也是这个结果,求解惑!