这是我自己写的二叉树,但是运行不来,老是出错,求高手指点
#include<stdio.h>
#include<stdlib.h>
#define overflow -1
typedef struct BiTNode//二叉树结构
{
int data;
struct BiTNode *Ls ,*Rs,*Parent;
}BiTNode,*BiTree;
void visit(BiTree Tree)//访问
{
printf("%d ",Tree->data);
}
void InitBiTree(BiTree Tree)//初始化
{
Tree=NULL;
}
void CreateBiTree(BiTree Tree)//建立树
{
int number;
scanf("%d",&number);
if(number==0) Tree=NULL;
else
{
Tree=(BiTree)malloc(sizeof(BiTree));
Tree->Parent=NULL;
if(!Tree) exit(overflow);//若无法分配空间,则退出函数,返回溢出错误
Tree->data=number;
CreateBiTree(Tree->Ls);
if(Tree->Ls) Tree->Ls->Parent=Tree;
CreateBiTree(Tree->Rs);
if(Tree->Rs) Tree->Rs->Parent=Tree;
}
}
void ClearBiTree(BiTree Tree)//删除树
{
if(Tree)
{
ClearBiTree(Tree->Ls);
ClearBiTree(Tree->Rs);
free(Tree);//释放Tree所指向的存储空间
Tree=NULL;
}
}
int Root(BiTree Tree)//求根
{
if(Tree->Parent!=NULL) Root(Tree->Parent);
else return Tree->data;
}
void DELLCHILD(BiTree Tree)//删除左孩子
{
if(Tree->Ls)
ClearBiTree(Tree->Ls);
}
void DELRCHILD(BiTree Tree)//删除右孩子
{
if(Tree->Rs)
ClearBiTree(Tree->Rs);
}
int Brother(BiTree Tree)//求兄弟
{
if(Tree==NULL) return 0;
else
{
if(Tree->Parent->Ls==Tree) return Tree->Parent->Rs->data;
else return Tree->Parent->Ls->data;
}
}
int Parent(BiTree Tree)//求双亲
{
if((Tree==NULL)||(Tree->Parent==NULL)) return 0;
else return Tree->Parent->data;
}
int Depth(BiTree Tree)
{
int i,j;
if(!Tree) return 0;
if(Tree->Ls)
i=Depth(Tree->Ls);
else i=0;
if(Tree->Rs)
j=Depth(Tree->Rs);
else j=0;
return i<j?i+1:j+1;
}
int InsertLchild(BiTree a,BiTree b)//把b插入成为a的左子树
{
if(!a) return 0;//a不存在,插入失败,返回0
else
{
b->Parent=a;
a->Ls=b;
}
return 1;//成功返回1
}
int InsertRchild(BiTree a,BiTree b)//把b插入成为a的右子树
{
if(!a) return 0;//a不存在,插入失败,返回0
else
{
b->Parent=a;
a->Rs=b;
}
return 1;//成功返回1
}
int RCHILD(BiTree Tree)//求右孩子
{
if(!Tree) return 0;//该结点不存在,返回0
if(Tree->Rs) return Tree->Rs->data;
else return 0;//结点右孩子不存在,返回0
}
int LCHILD(BiTree Tree)//求左孩子
{
if(!Tree) return 0;//该结点不存在,返回0
if(Tree->Ls) return Tree->Ls->data;
else return 0;
}
void PreOrderTraverse(BiTree Tree)//先序遍历
{
if(Tree)
visit(Tree);
PreOrderTraverse(Tree->Ls);
PreOrderTraverse(Tree->Rs);
}
void InOrderTraverse(BiTree Tree)//中序遍历
{
if(Tree)
InOrderTraverse(Tree->Ls);
visit(Tree);
InOrderTraverse(Tree->Rs);
}
void PostOrderTraverse(BiTree Tree)//后序遍历
{
if(Tree)
PostOrderTraverse(Tree->Ls);
PostOrderTraverse(Tree->Rs);
visit(Tree);
}
int main()
{
BiTree T;
InitBiTree(T);
CreateBiTree(T);
PreOrderTraverse(T);
return 0;
}
[解决办法]
&,就是取地址,C语言的传参有两种方式,一是复制参数,二是引用,&就是引用,你要修改传进来的变量,就得要用引用