二叉树遍历问题_二叉树遍历问题,求教,为什么没有输出???
#include<stdio.h>
#include<stdlib.h>
//#include<iostream>
typedef char elemType;
typedef struct node
{
elemType data;
struct node *lchild;
struct node *rchild;
} BTNode;
void creatTree(BTNode *T)
{
char ch;
if((ch=getchar())=='#')
T=NULL;
else
{
T=(BTNode *)malloc(sizeof(BTNode));
T->data=ch;
creatTree(T->lchild);
creatTree(T->rchild);
}
printf("0\n");
}
void InOrder(BTNode *b)
{
if(b!=NULL)
{
InOrder(b->lchild);
//cout<<b->data<<" ";
// elemType a=b->data;
printf("%c ",b->data);
// printf("2");
InOrder(b->rchild);
}
}
int main()
{
BTNode *Tree;
creatTree(Tree);
InOrder(Tree);
return 0;
}
最佳答案
你对指针及参数的概念有问题.
BTNode *Tree;
creatTree(Tree);
在你的creatTree函数中,Tree值是不会改变的,所以你再用
InOrder(Tree); //这个Tree是个随机地址
正确的:
#include<stdio.h>
#include<stdlib.h>
//#include<iostream>
typedef char elemType;
typedef struct node
{
elemType data;
struct node *lchild;
struct node *rchild;
} BTNode;
void creatTree(BTNode **T)
{
char ch;
if((ch = getchar()) == '#')
*T = NULL;
else
{
*T = (BTNode *)malloc(sizeof(BTNode));
(*T)->data = ch;
creatTree(&((*T)->lchild));
creatTree(&((*T)->rchild));
}
printf("0\n");
}
void InOrder(BTNode *b)
{
if(b != NULL)
{
InOrder(b->lchild);
//cout<<b->data<<" ";
// elemType a=b->data;
printf("%c ", b->data);
// printf("2");
InOrder(b->rchild);
}
}
int main()
{
BTNode *Tree;
creatTree(&Tree);
InOrder(Tree);
return 0;
}
追问:
大神牛逼了
追问:
大神能解释一下这个吗**T
指向指针的指针,也就是二维指针你的creatTree必须改变Tree指针的值,所以要用二维指针的
其他回答
暂无其它回答!