小菜鸡溜溜达 发表于 2021-10-17 12:40:01

求大佬们救救孩子,数据结构作业就要交了,很急很急

实验内容
1、按层序次序输入二叉树中结点的值(字符型或整型),构造顺序存储的二叉树T;
2、判断二叉树是否为空,输出二叉树的深度和根结点的值;
3、分别按层次序列、先序、中序、后序方法遍历二叉树,并打印。


看到帖子的大佬们:
有时间的话能不能瞅一眼孩子的代码,实在是不会了都看一早上了
没时间的话可不可以直接写个答案(不要写太复杂的,我看不懂TAT),我慢慢观摩

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>

// 定义二叉树二叉列表存储结构 结构体 BiTNode
typedef struct BiTNode{   
        char data;
        struct BiTNode *lchild, *rchild;
}BiTNode,*BiTree;

//创建一棵二叉树
//按书上写的敲下来的,看不太懂
BiTree CreateBiTree(BiTree T){
        char ch;
        printf("请输入节点:\n");
        scanf("%c",&ch);
        fflush(stdin);    //清空输入缓冲区
        if (ch=='\0')
        {
                T=NULL;
        }
        else{
                if(!(BiTree*)malloc(sizeof(BiTNode))) exit(0);
                //判断内存分配空间是否成功,给T指针分配连续的BiTree类型所占字节数的内存空间
                T->data = ch;
                T->lchild = CreateBiTree(T->lchild);
                T->rchild = CreateBiTree(T->rchild);
        }
        return(T);
}
//如何实现输出根结点?
//遍历二叉树
void level(BiTNode *T)
{
        //层次遍历二叉树
        int front, rear,maxSize;
        BiTNode *que;
        front = rear = 0;
        BiTNode *p;
        rear = (rear+1) % maxSize;
        que = T;
        while(front != rear)
        {
                p = que;
                //Visit(p); //我该怎么定义这个visit函数呢?
                if(p->lchild != NULL)
                {
                        rear = (rear+1) % maxSize;
                        que = p->lchild;
                }
                if(p->rchild != NULL)
                {
                        rear = (rear+1) % maxSize;
                        que = p->rchild;
                }
        }

}

//遍历二叉树
//void LevelOrder(BiTree *T) {
//        //层次序列遍历
//    InitQueue(Q); //初始化一个队列Q
//    BiTree *p; //p用来跟踪队头元素
//    EnQueue(Q,T); //根节点入队
//    while(!IsEmpty(Q)) {
//      DeQueue(Q,p);
//      visit(p);
//      if(p->lchild!=null) {
//            EnQueue(Q,p->lchild);
//      }
//      if(p->rchild!=null) {
//            EnQueue(Q,p->rchild);
//      }
//        }
//}

//先序遍历
voidPreOrderTraverse(BiTree T){
        if(T){
                printf("%c",T->data);                        // 打印 当前节点存储的数据
                PreOrderTraverse(T->lchild);        // 遍历左节点树
                PreOrderTraverse(T->rchild);        // 遍历右节点树
        }
}

//中序遍历
void InOrderTraverse(BiTree T){
        if(T){
                InOrderTraverse(T->lchild);
                printf("%c",T->data);
                InOrderTraverse(T->rchild);
        }
}

//后序遍历
void PostOrderTraverse(BiTree T){
        if(T){
                PostOrderTraverse(T->lchild);
                PostOrderTraverse(T->rchild);
                printf("%c",T->data);
        }
}

//返回二叉树的深度
int GetDepth(BiTree T)
{
        int l,r,c;
        l=r=c=0;
        if(T) {
                l=GetDepth(T->lchild);
                r=GetDepth(T->rchild);
                c=(l>r?l:r);
                return c+1;
        }
        else {
                return 0;
        }
}


int main()
{
        BiTree T;
        T=CreateBiTree(T);
        //判断二叉树是否为空
        if(T)                // todo 这一行有问题
                printf("二叉树不为空\n");
        else
                printf("二叉树为空\n");
        printf("二叉树的深度是:\n");
        printf("%d\n",GetDepth(T));
        if(T)
                printf("%c\n",T->data); //输出二叉树根结点的值todo 但是不需要这个代码 下面会打印的
        printf("输出按层次序列遍历二叉树:\n");       
        level(T);
        printf("输出按先序遍历二叉树:\n");       
        PreOrderTraverse(T);
        printf("输出按中序遍历二叉树:\n");       
        InOrderTraverse(T);
        printf("输出按后序遍历二叉树:\n");       
        PostOrderTraverse(T);
        return 0;
}

Gacy 发表于 2021-10-17 13:14:59

这种作业好像上学期我都做了{:10_254:}那时候我也像你一样急啊哈哈{:10_266:}

Gacy 发表于 2021-10-17 13:22:37

这是前中后序的,你自己看一下算法,自己加一个层次遍历 的进去就可以了
#include <stdio.h>
#include <stdlib.h>
/*二叉树链式存储的头文件*/
typedef char datatype;         /*结点属性值的类型*/
typedef struct node{         /*二叉树结点的类型*/
datatypedata;
struct node*lchild,*rchild;
}bintnode,*bintree;


bintree createbintree()
{/*按照前序遍历的顺序建立一棵给定的二叉树*/
char ch;
bintree t;
if ((ch=getchar())=='#')
      t=NULL;
else {
          t=(bintnode *)malloc(sizeof(bintnode));
          t->data=ch;
          t->lchild=createbintree();
          t->rchild=createbintree();
       }
    return t;
}


void preorder(bintree t)
{ /*前序遍历二叉树的递归算法*/
    if (t) {
             printf("%c",t->data);       /*根左右*/
                       preorder(t->lchild);
                 preorder(t->rchild);
             }
   }


void inorder(bintree t)
{ /*中序遍历二叉树的递归算法*/
    if (t) {
                       inorder(t->lchild);    /*左根右*/
                       printf("%c",t->data);
                 inorder(t->rchild);
             }
   }


void postorder(bintree t)
{ /*后序遍历二叉树的递归算法*/
    if (t) {
             postorder(t->lchild);         /*左右根*/
                 postorder(t->rchild);
             printf("%c",t->data);
            }
   }


void main()
{ bintree root;    /*自定义*/
   
    printf("请输入二叉树的结点值:");root=createbintree();   /*上面的输入二叉树的函数建二叉树*/
   
    printf("二叉树的前序遍历结果为:");preorder(root);
   
    printf("\n二叉树的中序遍历结果为:");inorder(root);
   
    printf("\n二叉树的后序遍历结果为:");postorder(root);
}

Gacy 发表于 2021-10-17 13:25:04

你加油 好像我没看到你代码抱歉{:10_254:}

小菜鸡溜溜达 发表于 2021-10-17 15:12:14

Gacy 发表于 2021-10-17 13:22
这是前中后序的,你自己看一下算法,自己加一个层次遍历 的进去就可以了

太太太感谢了,但我还想知道层次遍历以及输出根结点该怎么表示,书上没看到有相关代码{:5_92:}

Gacy 发表于 2021-10-17 15:13:34

要不我找找??上学期的事了,不知道还有没有
基础的书上肯定有啊

小菜鸡溜溜达 发表于 2021-10-17 15:17:44

Gacy 发表于 2021-10-17 15:13
要不我找找??上学期的事了,不知道还有没有
基础的书上肯定有啊

好的,我确实翻了好多遍二叉树相关的页码,没有{:5_96:}有前中后序的代码

Gacy 发表于 2021-10-17 15:21:45

你看看对你有没有用{:10_266:}
void levelorder(tree t)    /*树的层次遍历,t为指向树根结点的指针*/
    {tree queue;      /*存放等待访问的结点队列*/
       int f,r,i;            /*f、r分别为队头、队尾指针*/
       tree p;
       f=0; r=1; queue=t;
       while(f<r)      /*队列不为空*/
      {p=queue; f++; printf("%c",p->data);/*访问队头元素*/
         for(i=0;i<m;i++)   /*将刚被访问的元素的所有子女结点依次进队*/
         if(p->child)
            {queue=p->child;r++;}
         }
   }

Gacy 发表于 2021-10-17 15:28:18

小菜鸡溜溜达 发表于 2021-10-17 15:17
好的,我确实翻了好多遍二叉树相关的页码,没有有前中后序的代码

我怎么印象中书上是有的呢{:10_254:}拜拜了我先看教资去了{:10_266:}有空再来
页: [1]
查看完整版本: 求大佬们救救孩子,数据结构作业就要交了,很急很急