二叉树基本操作及遍历 调试成功 但报错为栈溢出 问题出在哪 哪位大神帮忙看看

发布于 2022-09-04 02:15:51 字数 2926 浏览 19 评论 0

include<stdio.h>

include<string>

include<iostream>

typedef int Status;

define OK 1;

define ERROR 0;

typedef struct BiTNode
{

char data;  //数据域;Type: 用户定义数据类型
struct BiTNode *Lchild;  //左指针域
struct BiTNode *Rchild;  //右指针域

} BiTNode, *BiTree;

Status IniBiTree(BiTree &T)
{

//构造空树
T = (BiTNode *)malloc(sizeof(BiTNode));
if (!T)return ERROR;//构造失败
T->Lchild = T->Rchild = NULL;
return OK;

}
int index = 0;
void CreateBiTree(BiTree &T)
{

//按先序次序输入二叉树中结点的值(一个字符),#字符表示空数,
//构造二叉链表表示的二叉树T。
char str[20]="AB#CD##EFG#HI###K";
if (str[index++] == '#')T = NULL;
else
{
    T = (BiTNode *)malloc(sizeof(BiTNode));
    if (!T) exit(OVERFLOW);//分配失败
    T->data = str[index-1];
    CreateBiTree(T->Lchild);//构造左子树
    CreateBiTree(T->Rchild);//构造右子树
}

}//CreateBiTree

Status IsEmpty(BiTree T)
{

if (T)return ERROR;//非空树
return OK;//空树

}
void ClearBiTree(BiTree &T)

{

if (T)
{
    if (T->Lchild)
        ClearBiTree(T->Lchild);//如果有左孩子
    if (T->Rchild)//如果有右孩子
        ClearBiTree(T->Rchild);
    free(T);//释放结点
    T = NULL;//根节点为空
}

}

char GetRoot(BiTree T)
{

if (!T) return '!';//如果是空树
else return T->data;

}

int GetDepth(BiTree T)
{//求的树的深度

int i, j;//i,j分别用来记左子树和右子树
if (!T) return 0;
if (T->Lchild) i = GetDepth(T->Lchild);
else i = 0;
if (T->Rchild) j = GetDepth(T->Rchild);
else j = 0;
return i > j ? i + 1 : j + 1;

}
void PreOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//先序遍历二叉树T的递归算法。

if (T) {
    printf("%c", T->data);
    PreOrderTraverse(T->Lchild);//遍历左子树
    PreOrderTraverse(T->Rchild);//遍历右子树
}

}//PreOrderTraverse
void InOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//中序遍历二叉树T的递归算法。

if (T) {
    InOrderTraverse(T->Lchild);//遍历左子树
    printf("%c", T->data);
    InOrderTraverse(T->Rchild);//遍历右子树
}

}//InOrderTraverse
void PostOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//后序遍历二叉树T的递归算法。

if (T) {
    PostOrderTraverse(T->Lchild);//遍历左子树
    PostOrderTraverse(T->Rchild);//遍历右子树
    printf("%c", T->data);
}

}//PostOrderTraverse
int main()
{

BiTree tree;
IniBiTree(tree);//初始化二叉树
CreateBiTree(tree);//创建二叉树
printf("此树是否为空树?是:1 否:0%d\n", IsEmpty(tree));//判断是否为空树
printf("该树的深度为%d\n该树的根节点为%c\n", GetDepth(tree), GetRoot(tree));//获取树的深度及根节点
printf("\n前序遍历二叉树\n");
PreOrderTraverse(tree);//前序遍历二叉树
printf("\n中序遍历二叉树\n");
InOrderTraverse(tree);//中序遍历二叉树
printf("\n后序遍历二叉树\n");
PostOrderTraverse(tree);//后序遍历二叉树
system("pause");
return 0;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

¢蛋碎的人ぎ生 2022-09-11 02:15:51

构造字符串有问题,你再仔细看看,k只是与g同一层的,远没有结束,正常的话k后面还要跟好多#。

陌若浮生 2022-09-11 02:15:51

....题主,我建议你啊...善用markdown

#include<stdio.h>
int main(){
    printf("代码写在``` ```排版比较整齐");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文