|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码 |
|