鱼C论坛

 找回密码
 立即注册
查看: 2309|回复: 1

二叉树基本操作,复制二叉树然后遍历打印新的二叉树出现了问题,求助

[复制链接]
发表于 2020-3-30 18:20:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-30 18:34:10 | 显示全部楼层
解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 01:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表