数据结构试验四

一、实验目的

巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。

二、实验内容

1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树节点。

源代码如下:

头文件tree.h

#ifndef tree_H
#define tree_H
struct node
{
    char data;
    node*lchild, *rchild;
};
class tree
{
public:
    tree(){ root = creat(root); }
    ~tree(){ release(root); }
    void preorder(){ preorder(root); }
    void inorder(){ inorder(root); }
    void postorder(){postorder(root);}
    void leverorder(){ leverorder(root); }
private:
    node*root,*d;
    int rear, front;
    node* c[100000];
    node*creat(node*a);
    void release(node*a);
    void preorder(node*a);
    void inorder(node*a);
    void postorder(node*a);
    void leverorder(node*a);
};
#endif

源文件tree.cpp

#include<iostream>
using namespace std;
#include"tree.h"

node*tree::creat(node*a)
{
    char b; 
        cout << "请输入创建一棵二叉树的节点数据" << endl;
        cin >> b;
        if (b == '#')return NULL;
        else
        {
            a = new node;
            a->data = b;
            a->lchild = creat(a->lchild);
            a->rchild = creat(a->rchild);
        }
        return a;
}

void tree::release(node*a)
{
    if (a != NULL)
    {
        release(a->lchild);
        release(a->rchild);
        delete a;
    }
}

void tree::preorder(node*a)
{
    if (a ==NULL)return;
    else{
        cout << a->data<<" ";
        preorder(a->lchild);
        preorder(a->rchild);
    }
}

void tree::inorder(node*a)
{
    if (a ==NULL)return;
    else{
        preorder(a->lchild);
        cout << a->data << " ";
        preorder(a->rchild);
    }
}

void tree::postorder(node*a)
    {
    if (a == NULL)return;
        else{
            postorder(a->lchild);
            postorder(a->rchild);
            cout << a->data << " ";
        }
    }

void tree::leverorder(node*a)
{
    rear = front = -1;
    if (root == NULL)return;
    c[++rear] = root;
    while (rear != front)
    {
        d = c[++front];
        cout << d->data << " ";
        if (d->lchild != NULL)c[++rear] = d->lchild;
        if (d->rchild != NULL)c[++rear] = d->rchild;
    }
}

源文件main.cpp

#include<iostream>
using namespace std;
#include "tree.h"

int main()
{
    tree t;
    cout << "前序遍历:" << endl;
    t.preorder();
    cout << endl;
    cout << "中序遍历:" << endl;
    t.inorder();
    cout << endl;
    cout << "后序遍历:" << endl;
    t.postorder();
    cout << endl;
    cout << "层序遍历:" << endl;
    t.leverorder();
    cout << endl;
    system("pause");
    return 0;
}

运行效果如下:
这里写图片描述

三、总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值