二叉树创建时的指针有关问题
二叉树创建时的指针问题
部分源代码:
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node * lchild;
struct node * rchild;
}node, *Tree;
void CreateTree( Tree tree )
{
tree = ( Tree )malloc( sizeof( struct node ) );
......
}
int main( void )
{
Tree bitree;
CreateTree( bitree );
system( "pause" );
return 0;
}
程序报错!
1."The variable bitree is being used without being initialized"
我不明白,在main函数中创建了一个指向node的指针。
在CreateTree中对其进行初始化为什么不行呢?
2.我在网上看了一些程序,
比如这个:
typedef struct treenode
{
char data;
int weight;
treenode *left;
treenode *right;
}Treenode,*Treep;
//初始化二叉树
void init_tree(Treep &root)
{
root=NULL;
}
我不明白init_tree中的形参的意思?root是什么类型的变量?Treep在这里是将它强制转换吗成Treep型吗?
好纠结啊?
------解决方案--------------------
C语言写法
不要和C++里面的引用(&)搞混了
部分源代码:
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node * lchild;
struct node * rchild;
}node, *Tree;
void CreateTree( Tree tree )
{
tree = ( Tree )malloc( sizeof( struct node ) );
......
}
int main( void )
{
Tree bitree;
CreateTree( bitree );
system( "pause" );
return 0;
}
程序报错!
1."The variable bitree is being used without being initialized"
我不明白,在main函数中创建了一个指向node的指针。
在CreateTree中对其进行初始化为什么不行呢?
2.我在网上看了一些程序,
比如这个:
typedef struct treenode
{
char data;
int weight;
treenode *left;
treenode *right;
}Treenode,*Treep;
//初始化二叉树
void init_tree(Treep &root)
{
root=NULL;
}
我不明白init_tree中的形参的意思?root是什么类型的变量?Treep在这里是将它强制转换吗成Treep型吗?
好纠结啊?
------解决方案--------------------
C语言写法
不要和C++里面的引用(&)搞混了
#include<stdio.h>
#include<stdlib.h>
typedef struct btnode{
char data;
struct btnode *lchild, *rchild;
}BTNode;
typedef struct{
BTNode elem[20];
int front,rear;
}SqQueue;
BTNode * CreatTree( void );
void Preorder(BTNode *bt );
void Inorder(BTNode *bt );
void Postorder(BTNode *bt );
void Levelsorder(BTNode *bt);
void ExChangeLeafs(BTNode *bt);
void EnQueue(SqQueue *sq,BTNode *bt);
void DelQueue(SqQueue *sq,BTNode *p);
void InitQueue(SqQueue *sq);
void Disptree(BTNode *bt);
main()
{
BTNode *t;
char s[10];
for(;;)
{
printf("1--------CreatTree 2-----------Preorder \n");
printf("3--------Inorder 4-----------Postorder \n");
printf("5--------Levelsorder 6-----------ExchangeLeafs(Preorder) \n");
printf("7--------Exit\n");
gets(s);
switch(*s)
{
case '1': t=CreatTree();
break;
case '2': Preorder(t);
printf("\n");
break;
case '3': Inorder(t);
printf("\n");