马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天下午总结了一下二叉树的基本操作,但是在到了复制操作后,然后再打印新的二叉树,直接出现了程序崩溃,实在不知道为什么,进入调试会出现:引发了异常读取访问权限冲突 T是0xCDCDCDCD,求助啊。。#include<stdio.h>
#include<stdlib.h>
#define MAXTSIZE 100; //二叉树的最大结点数
typedef char TElemType;
//typedef TElemType SqBiTree[MAXSIZE]; //0号单元的储存根结点
//ySqBiTree bt;
typedef struct BiTNode
{
TElemType data; //结点数据域
struct BiTNode* lchild;
struct BiTNode* rchild; //结点的指针域
}BiTNode, * BiTree;
//前序遍历建立二叉树
void PreOrderCreatBiTree(BiTree* T)
{
char ch;
scanf("%c", &ch);
if (ch == ' ')
{
*T = NULL;
}
else
{
*T = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->data = ch;
PreOrderCreatBiTree(&(*T)->lchild);
PreOrderCreatBiTree(&(*T)->rchild);
}
}
//前序遍历打印二叉树
void PreOrderTarverse(BiTree T)
{
if (T)
{
printf("%c", T->data);
PreOrderTarverse(T->lchild);
PreOrderTarverse(T->rchild);
}
}
//中序遍历打印二叉树
void InOrderTarverse(BiTree T)
{
if (T)
{
InOrderTarverse(T->lchild);
printf("%c", T->data);
InOrderTarverse(T->rchild);
}
}
//后序遍历打印二叉树
void PostOrderTraverse(BiTree T)
{
if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
}
//复制一颗二叉树
void Copy(BiTree T, BiTree *NewT)
{
if (T == NULL)
{
*NewT == NULL;
return;
}
else
{
*NewT = (BiTNode *)malloc(sizeof(BiTNode));
//* T = (BiTNode*)malloc(sizeof(BiTNode));
(*NewT)->data = T->data;
Copy(T->lchild, &(*NewT)->lchild);
Copy(T->rchild, &(*NewT)->rchild);
}
}
//求深度
int Depth(BiTree T)
{
int m = 0;
int n = 0;
if (T == NULL)
return 0;
else
{
m = Depth(T->lchild);
n = Depth(T->rchild);
}
if (m > n)
return (m + 1);
else
return (n + 1);
}
//统计结点个数
int NodeCount(BiTree T)
{
if (T == NULL)
{
return 0;
}
else
{
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
}
int main(void)
{
BiTree T = NULL;
BiTree NewT = NULL;
int depth;
int NodeNum;
//BiTree pNewT;
printf("前序遍历创建二叉树,' '表示空:\n");
PreOrderCreatBiTree(&T);
printf("下面前序遍历打印二叉树:\n");
PreOrderTarverse(T);
printf("\n");
printf("下面中序遍历打印二叉树:\n");
InOrderTarverse(T);
printf("\n");
printf("下面后序遍历打印二叉树:\n");
PostOrderTraverse(T);
printf("\n");
printf("开始复制二叉数并前序遍历打印:\n");
Copy(T, &NewT);
PreOrderTarverse(NewT);
printf("下面计算二叉树的深度:\n");
depth = Depth(T);
printf("二叉树的深度为:%d", depth);
printf("\n下面统计二叉树中结点的个数:\n");
NodeNum = NodeCount(T);
printf("结点总结点个数为:%d", NodeNum);
return 0;
}
|