|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//问题代码:
#include <stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
//创建二叉树,按照前序遍历的方法输入
void createBiTree(BiTree T)
{
char c;
scanf("%c", &c);
if('#' == c)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
//递归遍历
void Travel(BiTree T)
{
if(T)
{
printf("%c\n",T->data);
Travel(T->lchild);
Travel(T->rchild);
}
}
int main()
{
BiTree T=NULL;
createBiTree(T);
Travel(T);
return 0;
}
请问一下,为什么当运行到Travel(T)的时候,显示T还是为空呢?
而当按照下面的方法来做,就是对的,,,请问一下区别在哪里?谢谢
//正确代码
#include <stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
//按前序遍历方法创建二叉树
BiTree createBiTree()
{
BiTree T;
char c;
scanf("%c", &c);
if('#' == c)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = c;
T->lchild = createBiTree();
T->rchild = createBiTree();
}
return T;
}
//递归遍历
void Travel(BiTree T)
{
if(T)
{
printf("%c\n", T->data);
Travel(T->lchild);
Travel(T->rchild);
}
}
int main()
{
BiTree T;
T = createBiTree();
Travel(T);
return 0;
}
本帖最后由 fc1735 于 2017-3-6 18:18 编辑
- void createBiTree(BiTree *T)
- {
- char c;
- scanf("%c", &c);
- if('#' == c)
- {
- *T = NULL;
- }
- else
- {
- *T = (BiTNode *)malloc(sizeof(BiTNode));
- (*T)->data = c;
- createBiTree(&T->lchild);
- createBiTree(&T->rchild);
- }
- }
复制代码
|
|