首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

这是小弟我自己写的二叉树,但是运行不来,老是出错,求

2012-04-07 
这是我自己写的二叉树,但是运行不来,老是出错,求高手指点#includestdio.h#includestdlib.h#define ove

这是我自己写的二叉树,但是运行不来,老是出错,求高手指点
#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语言的传参有两种方式,一是复制参数,二是引用,&就是引用,你要修改传进来的变量,就得要用引用

热点排行