主题:(求助)关于用C语言实现二叉树的二叉链表的创建
funben
[专家分:420] 发布于 2006-04-11 02:50:00
用递归算法,先顺。
struct BinTree{
char data;
struct BinTree *lchild;
struct BinTree *rchild;
};
void PreCreateBinTree(struct BinTree **root)
{
char ch;
scanf(" %c",&ch);
if (ch=='?')
{
*root = NULL;
printf("\nNULLKEY,function returned!\n");
return ;
}
else{
*root = (struct BinTree*)malloc(sizeof(struct BinTree));
(*root)->data = ch;
PreCreateBinTree(&((*root)->lchild));
PreCreateBinTree(&((*root)->rchild));
}
}
把指向root指针的指针,传给PreCreateBinTree()函数,
假如有
struct BinTree *root = NULL;
当执行PreCreateBinTree(&root);后按理说root里因该有内容了,
但是,当输入ab??c??时,root指向的却是最后一个c而不是a.
请问,怎样才能使root指向a.
回复列表 (共4个回复)
沙发
rickone [专家分:15390] 发布于 2006-04-12 13:09:00
应该不会啊,root应该一直指向a的,我觉得
板凳
rickone [专家分:15390] 发布于 2006-04-12 13:13:00
void main()
{
struct BinTree *root;
PreCreateBinTree(&root);
printf("%c\n",root->data);
}
输出:
ab??c??
NULLKEY,function returned!
NULLKEY,function returned!
NULLKEY,function returned!
NULLKEY,function returned!
a
Press any key to continue
3 楼
rickone [专家分:15390] 发布于 2006-04-12 13:21:00
给你改了一下,整个过程更清晰:
#include <stdio.h>
#include <malloc.h>
struct BinTree{
char data;
struct BinTree *lchild;
struct BinTree *rchild;
};
void PreCreateBinTree(struct BinTree **root)
{
char ch;
scanf(" %c",&ch);
if (ch=='?')
{
*root = NULL;
printf("NULL结点,返回\n");
return ;
}
else{
printf("新结点:%c\n",ch);
*root = (struct BinTree*)malloc(sizeof(struct BinTree));
(*root)->data = ch;
printf("正在创建%c的左子树\n",(*root)->data);
PreCreateBinTree(&((*root)->lchild));
printf("正在创建%c的右子树\n",(*root)->data);
PreCreateBinTree(&((*root)->rchild));
}
}
void main()
{
struct BinTree *root;
PreCreateBinTree(&root);
printf("root->data=%c\n",root->data);
}
ab??c??
新结点:a
正在创建a的左子树
新结点:b
正在创建b的左子树
NULL结点,返回
正在创建b的右子树
NULL结点,返回
正在创建a的右子树
新结点:c
正在创建c的左子树
NULL结点,返回
正在创建c的右子树
NULL结点,返回
root->data=a
Press any key to continue
4 楼
avenger07 [专家分:160] 发布于 2006-09-10 23:45:00
[quote]给你改了一下,整个过程更清晰:
#include <stdio.h>
#include <malloc.h>
struct BinTree{
char data;
struct BinTree *lchild;
struct BinTree *rchild;
};
void PreCreateBinTree(struct BinTree **root)
{
char ch;
scanf(" %c",&ch);
if (ch=='?')
{
*root = [color=FF0000]NULL[/color];
printf("NULL结点,返回\n");
return ;
}
else{
printf("新结点:%c\n",ch);
*root = (struct BinTree*)malloc(sizeof(struct BinTree));
(*root)->data = ch;
printf("正在创建%c的左子树\n",(*root)->data);
PreCreateBinTree(&((*root)->lchild));
printf("正在创建%c的右子树\n",(*root)->data);
PreCreateBinTree(&((*root)->rchild));
}
}
void main()
{
struct BinTree *root;
PreCreateBinTree(&root);
printf("root->data=%c\n",root->data);
}
上面的NUll好像没有定义,为什么编译也不抱错呢?
我来回复