实验三:二叉树遍历算法的设计

更新时间:2023-06-30 14:41:37 阅读: 评论:0

妨的组词             
《数据结构》实验报告
题  目:二叉树遍历算法的设计
学生姓名:孙跃
学  院:理学院
系  别:数学系
专  业:信息与计算科学
班  级:信计12-2
任课教师杜雅娟
二〇一四年十一月
一、实验目的
通过理解二叉树的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。
二、程序分析
本演示程序用Visual C++ 6.0编写,完成二叉树的遍历算法。
1.按先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树t;
2.对二叉树t作先序、中序、后序遍历的递归算法,输出结果;
3.计算二叉树t的深度,输出结果;
幼儿园中班教案4.计算二叉树t的叶子结点个数。
三、程序设计
在开头定义了二叉树的链式存储结构,此处采用了每个结点中设置三个域, 即值域,左指针域和右指针域。
1、二叉树的建立链式存储结构,首先typedef struct BiTNode:定义二叉树的链式存储结构,此处采用了每个结点中设置三个域,data:即值域,*lchild:左指针域和rchild:右指针域;
2、二叉树的前序遍历;利用二叉链表作为存储结构的前序遍历:先访问根结点,再依次访问左右子树;
3、二叉树的中序遍历;利用二叉链表作为存储结构的中序遍历:先访问左子数,再访问根结点,最后访问右子树;
4、二叉树的后序遍历;利用二叉链表作为存储结构的前序遍历:先访问左右子树,再访问根结点;
5、求二叉树的深度:首先判断二叉树是否为空,若为空则此二叉树的深度为0。否则,就先别求出左右子树的深度并进行比较,取较大的+1就为二叉树的深度;
6、二叉树的求叶子结点的个数计算;先分别求得左右子树中各叶子结点个数,再计算出两者之和即为二叉树的叶子结点数;
7、主函数:主函数中分别调用各函数。
四、实验程序
#include<stdio.h>
#include<malloc.h>
#define M 20
typedef struct node
{
    char data;
    struct node *lchild,*rchild;湖色
}BTnode;
BTnode * create()
{
    BTnode *t;
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        t=NULL;
    el
    {
母爱无边
        t=(BTnode*)malloc(sizeof(BTnode));
读书笔记摘抄好词好句
        t->data=ch;
        t->lchild=create();
        t->rchild=create();
    }
    return t;
}
void Inordertraver(BTnode *t)
{
    int i=0;
    BTnode *p,*s[M];
    p=t;
    do
    {
        while(p!=NULL)
        {
            s[i++]=p;
            p=p->lchild;
        }
        if(i>0)
        {
            p=s[--i];
            printf("%c\t",p->data);
            p=p->rchild;
        }
}while(i>0||p!=NULL);
}
寝室装扮void Preordertraver(BTnode *t)
{
        int i=0;
    BTnode *p,*s[M];
    p=t;
    do
    {
        while(p!=NULL)
        {
            printf("%c\t",p->data);
            if(p->rchild!=NULL)
                s[i++]=p->rchild;
            p=p->lchild;
        }
        if(i>0)
            p=s[--i];
    }while(i>0||p!=NULL);
}
void Postordertraver(BTnode *t)
{
    int sl[M];
    int i=0;
    BTnode *p,*s[M];
    p=t;
    do
    {
        while(p!=NULL)
        {
            s[i]=p;
            sl[i++]=0;
            p=p->lchild;
        }
        while(i>0&&sl[i-1]==1)
        {
            p=s[--i];
            printf("%c\t",p->data);
            free(p);
        }
        if(i>0)
        {
            sl[i-1]=1;
            p=s[i-1];
            p=p->rchild;
        }人民英雄纪念碑碑文
    }while(i>0);广州有什么大学
    printf("\n");
}
int high(BTnode *t)
{
    int h,lh,rh;
    if(!t)
        return 0;
    lh=high(t->lchild);
    rh=high(t->rchild);
    h=lh?lh+1:rh+1;

本文发布于:2023-06-30 14:41:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1061691.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:二叉树   遍历   结点
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图