实验三、二叉树的基本操作

更新时间:2023-06-30 14:45:25 阅读: 评论:0

实验三  二叉树的基本运算
一、实验目的
1、使学生熟练掌握二叉树的逻辑结构和存储结构。
2、熟练掌握二叉树的各种遍历算法。
表演区活动目标
二、实验内容
题目一:二叉树的基本操作实现必做题)
[问题描述]
建立一棵二叉树,试编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;(选做)
4. 将二叉树每个结点的左右子树交换位置。(选做)
[基本要求]
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),
[测试数据]
如输入:ABCффDEфGффFффф(其中ф表示空格字符)
  则输出结果为
先序:ABCDEGF
  中序:CBEGDFA
  后序:CGEFDBA
层序:ABCDEFG
[选作内容]
采用非递归算法实现二叉树遍历。
三、 算法设计
1、 主要思想:根据二叉树的图形结构创建出二叉树的数据结构,然后用指针对树进行操作,重点掌握二叉树的结构和性质。
2、 本程序包含四个模块:
(1)结构体定义
        (2) 创建二叉树
        (3) 对树的几个操作
            (4) 主函数
四、 调试分析
这是一个比较简单程序,调试过程中并没有出现什么问题,思路比较清晰
五、 实验结果
六、 总结
此次上机实验对二叉树进行了以一次实际操作,让我对二叉树有了更深的了解,对二叉树的特性有了更熟悉的认知,让我知道了二叉树的重要性和便利性,这对以后的编程有更好的帮助。
七、源程序
#include<iostream>
心情愉悦
#include<queue>
using namespace std;
#define TElemType char
#define Status int
美女动漫图片#define OK 1
#define ERROR 0
typedef struct BiTNode{
    TElemType data;
    struct BiTNode * lchild, *rchild;
}BiTNode,* BiTree;
Status CreateBiTree(BiTree &T)
{
    TElemType ch;
    cin >> ch;
旋转三要素    if (ch == '#')
        T = NULL;
    el
    {
        if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))五粮液一马当先
            exit(OVERFLOW);
        T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return OK;
}
Status PreOrderTraver(BiTree T)
{
    if (T)
    {
        cout << T->data;
        if (PreOrderTraver(T->lchild))
        if (PreOrderTraver(T->rchild))
            return OK;瘀血怎么快速消除
        return ERROR;
    }
    el
        return OK;
}
Status InOrderTraver(BiTree T)
{
    if (T)
    {
       
        InOrderTraver(T->lchild);
        cout << T->data;
        InOrderTraver(T->rchild);
    }
    return OK;
}
Status PostOrderTraver(BiTree T)惊羡
{
    if (T)
    {
        PostOrderTraver(T->lchild);
        PostOrderTraver(T->rchild);
        cout << T->data;
    }
    return OK;
}
Status leOrderTraver(BiTree T)
{
    std::queue<BiTree> Q;
    if (T == NULL)return ERROR;
    el{
        Q.push(T);
        while (!Q.empty())
        {
            T = Q.front();
            Q.pop();
            cout << T->data;
            if (T->lchild != NULL)
                Q.push(T->lchild);
            if (T->rchild != NULL)
                Q.push(T->rchild);
装烤瓷牙        }
    }
    return OK;
}
Status change(BiTree T)
{
    BiTree temp = NULL;
    if (T->lchild == NULL && T->rchild == NULL)
        return OK;
    el{
        temp = T->lchild;
        T->lchild = T->rchild;
        T->rchild = temp;
    }
    if (T->lchild)
        change(T->lchild);
    if (T->rchild)
        change(T->rchild);
    return OK;
}
int FindTreeDeep(BiTree T){
    int deep = 0;
    if (T){
        int lchilddeep = FindTreeDeep(T->lchild);
        int rchilddeep = FindTreeDeep(T->rchild);
        deep = lchilddeep >= rchilddeep ? lchilddeep + 1 : rchilddeep + 1;
    }
    return deep;
}
int main()
{
    BiTree T;
    CreateBiTree(T);
    cout << "先序遍历顺序为:";
    PreOrderTraver(T);
    cout << endl;
    cout << "中序遍历顺序为:";
    InOrderTraver(T);
    cout << endl;
    cout << "后序遍历顺序为:";
    PostOrderTraver(T);
    cout << endl;
    cout << "层序遍历顺序为:";
    leOrderTraver(T);
    cout << endl;

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

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070362.html

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

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