首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二叉树的有关问题,调试出现Access Violation,为什么?求解答

2012-04-15 
二叉树的问题,调试出现Access Violation,为什么?求解答。#include stdio.h#include malloc.h#include

二叉树的问题,调试出现Access Violation,为什么?求解答。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OVERFLOW -2

typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BTree;

BTree CreateBTree(BTree &T){
char a;
  scanf("%c",&a);
if(a =='#')
T=NULL;
  else{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T){
exit(OVERFLOW);
T->data=a;
CreateBTree(T->lchild);
CreateBTree(T->rchild);
}
}

return T;
}

int GetBTreeDepth(BTree &T) //求二叉树的深度
{
if(T==NULL)
  return 0;
else 
{ int d1 = GetBTreeDepth(T->lchild );
int d2 = GetBTreeDepth(T->rchild );
if(d1>=d2)return d1+1;
else return d2+1;
}


}
int LeafCount(BTree &T)//求二叉树中叶子结点的数目
{
  if(!T) return 0; 
  else if(!T->lchild&&!T->rchild) return 1; 
  else return LeafCount(T->lchild)+LeafCount(T->rchild);
}
/*
void PreOrderTraverse(BTree T, char (*Visit)(char e))
{
  if(T)
  {
  Visit(T->data);
  PreOrderTraverse(T->lchild,Visit);
  PreOrderTraverse(T->rchild,Visit); 
  }
}
char Visit(char e)
{
 printf("%c",e);
 return 1;
}

*/
void main()
{
BTree T = NULL;
printf("请输入二叉数的结点序列:\n");
  T = CreateBTree(T);
//PreOrderTraverse(T,Visit);
printf("二叉树的深度为:%d\n",GetBTreeDepth(T));
  printf("二叉树节点数为:%d\n",LeafCount(T));
}



[解决办法]
你这个地方貌似应该是这样的吧

C/C++ code
                if(!T)        {            exit(OVERFLOW);        }        else        {            T->data=a;            CreateBTree(T->lchild);            CreateBTree(T->rchild);        }
[解决办法]
我以前写的,仅供参考。
http://blog.csdn.net/w170532934/article/details/7089656

热点排行