树顺序存储完全二叉树先中后序遍历实验内容与要求.docx

上传人:b****1 文档编号:12515701 上传时间:2023-04-19 格式:DOCX 页数:9 大小:65.06KB
下载 相关 举报
树顺序存储完全二叉树先中后序遍历实验内容与要求.docx_第1页
第1页 / 共9页
树顺序存储完全二叉树先中后序遍历实验内容与要求.docx_第2页
第2页 / 共9页
树顺序存储完全二叉树先中后序遍历实验内容与要求.docx_第3页
第3页 / 共9页
树顺序存储完全二叉树先中后序遍历实验内容与要求.docx_第4页
第4页 / 共9页
树顺序存储完全二叉树先中后序遍历实验内容与要求.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

树顺序存储完全二叉树先中后序遍历实验内容与要求.docx

《树顺序存储完全二叉树先中后序遍历实验内容与要求.docx》由会员分享,可在线阅读,更多相关《树顺序存储完全二叉树先中后序遍历实验内容与要求.docx(9页珍藏版)》请在冰豆网上搜索。

树顺序存储完全二叉树先中后序遍历实验内容与要求.docx

树顺序存储完全二叉树先中后序遍历实验内容与要求

数据结构实验报告

评分

 

满分——5分

学号:

2015111840姓名:

陈周擎专业:

计算机科学与技术

知识范畴:

树完成日期:

2016年04月28日

实验题目:

顺序存储完全二叉树先、中、后序遍历

实验内容及要求:

输入一个字符串,存储于一维数组。

以该一维数组作为完全二叉树的存储结构,实现先、中、后序遍历,输出遍历结果。

将该完全二叉树转换为二叉链表存储结构,然后基于二叉链表存储结构再次进行先、中、后序遍历并输出遍历结果。

实验目的:

掌握完全二叉树的顺序存储与链式存储结构以及遍历算法。

数据结构设计简要描述:

分别以一维数组和二叉链表为存储结构存储二叉树,并实现先序、中序、后序遍历。

算法设计简要描述:

分别以一维数组和二叉链表为存储结构存储二叉树。

以一维数组存储时,假设双亲结点的下标为i,则左儿子、右儿子的下标分别为2*i+1、2*i+2。

利用递归算法分别对左子树和右子树进行遍历。

以二叉链表为存储结构时,结点数据域存储结点数据,然后依次递归左子树和右子树。

输入/输出设计简要描述:

本实验中输入和输出分别只有一次。

输入:

输入一个字符串,存储到一维数组中

输出:

分别以一维数组和二叉链表为存储结构存储二叉树时,先序、中序、后序遍历结果。

编程语言说明:

1.编程软件,CodeBlocks16.0;

2.代码均用C++语言实现;

3.输入输出采用C++语言的cout和cin函数;

4.程序注释采用C/C++规范;

5.动态存储分配采用C++的new和delete操作符实现

主要函数说明:

voidpreorder_array(char*s,inti,intcount)//一维数组作为存储结构的前序遍历

voidmidorder_array(char*s,inti,intcount)//一维数组作为存储结构的中序遍历

voidlasorder_array(char*s,inti,intcount)//一维数组作为存储结构的后序遍历

voidtrans_tree(BiT&bt,char*s,intcount,intt)//将该完全二叉树存储结构转换

voidpreorder(BiTbt)//以二叉链表前序遍历

voidmidorder(BiTbt)//以二叉链表中序遍历

voidlasorder(BiTbt)//以二叉链表后序遍历

程序测试简要报告:

(1)测试实例1

输入:

Pleaseinput:

abcde

输出:

Preorder_array:

abdec

Midorder_array:

dbeac

Lasorder_array:

debca

Preorder:

abdec

Midorder:

dbeac

Lasorder:

debca

运行界面:

结论:

程序输出结果与期望输出结果相符。

(2)测试实例1

输入:

Pleaseinput:

abcjdhr

输出:

Preorder_array:

abjdchr

Midorder_array:

jbdahor

Lasorder_array:

jdbhrca

Preorder:

abjdchr

Midorder:

jbdahor

Lasorder:

jdbhrca

运行界面:

结论:

程序输出结果与期望输出结果相符。

(3)测试实例1

输入:

Pleaseinput:

abdnjfkrie

输出:

Preorder_array:

abnrijedfk

Midorder_array:

rnIbejafdk

Lasorder_array:

rInejbfkda

Preorder:

abnrijedfk

Midorder:

rnibejafdk

Lasorder:

rinejbfkda

运行界面:

结论:

程序输出结果与期望输出结果相符。

(4)测试实例1

输入:

Pleaseinput:

abcdefghijk

输出:

Preorder_array:

abdhiejkcfg

Midorder_array:

hdibjekafcg

Lasorder_array:

hidjkebfgca

Preorder:

abdhiejkcfg

Midorder:

hdibjekafcg

Lasorder:

hidjkebfgca

运行界面:

结论:

程序输出结果与期望输出结果相符。

源程序代码:

#include

#include

#include

usingnamespacestd;

typedefstructnode

{

chardata;//数据域

structnode*lchild;//左指针

structnode*rchild;//右指针

}*BiT,BiTNode;

voidpreorder_array(char*s,inti,intcount)//一维数组作为存储结构的前序遍历

{

if(i>count)//遍历结束时,退出

return;

cout<

preorder_array(s,2*i+1,count);//递归遍历左儿子

preorder_array(s,2*i+2,count);//递归遍历右儿子

}

voidmidorder_array(char*s,inti,intcount)//一维数组作为存储结构的中序遍历

{

if(i>count)//遍历结束时,退出

return;

midorder_array(s,2*i+1,count);//递归遍历左儿子

cout<

midorder_array(s,2*i+2,count);//递归遍历右儿子

}

voidlasorder_array(char*s,inti,intcount)//一维数组作为存储结构的后序遍历

{

if(i>count)//遍历结束时,退出

return;

lasorder_array(s,2*i+1,count);//递归遍历左儿子

lasorder_array(s,2*i+2,count);//递归遍历右儿子

cout<

}

voidtrans_tree(BiT&bt,char*s,intcount,intt)//将该完全二叉树存储结构转换为二叉链表

{

if(t>count)//遍历结束时,退出

return;

bt=newBiTNode();

bt->data=s[t];//填充结点

bt->lchild=NULL;//左儿子置空

bt->rchild=NULL;//右儿子置空

trans_tree(bt->lchild,s,count,t*2+1);//递归遍历左儿子

trans_tree(bt->rchild,s,count,t*2+2);//递归遍历右儿子

}

voidpreorder(BiTbt)//以二叉链表前序遍历

{

if(bt)//树非空

{

cout<data<<"";

preorder(bt->lchild);//递归遍历左儿子

preorder(bt->rchild);//递归遍历右儿子

}

}

voidmidorder(BiTbt)//以二叉链表中序遍历

{

if(bt)//树非空

{

midorder(bt->lchild);//递归遍历左儿子

cout<data<<"";

midorder(bt->rchild);//递归遍历右儿子

}

}

voidlasorder(BiTbt)//以二叉链表后序遍历

{

if(bt)//树非空

{

lasorder(bt->lchild);//递归遍历左儿子

lasorder(bt->rchild);//递归遍历右儿子

cout<data<<"";

}

}

intmain()

{

intcount=0,t=0;

char*str=newchar;

cout<<"pleaseinputarray:

";

cin>>str;

count=strlen(str);//求数组长度

cout<<"preorder_array:

";

preorder_array(str,0,count);

cout<

cout<<"midorder_array:

";

midorder_array(str,0,count);

cout<

cout<<"lasorder_array:

";

lasorder_array(str,0,count);

cout<

BiTbt;

trans_tree(bt,str,count,t);

cout<

cout<<"preorder:

";

preorder(bt);

cout<

cout<<"midorder:

";

midorder(bt);

cout<

cout<<"lasorder:

";

lasorder(bt);

cout<

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1