实验题目
树和二叉树
小组合作
姓名
班级
学    号
一、实验目的
(1)掌握树的相关概念,包括树、结点的度、树的度、分支结点、叶子结点、儿子结点、双亲结点、树的深度、森林等定义。
(2)掌握二叉树的概念,包括二叉树、满二叉树和完全二叉树的定义。
(3)掌握哈夫曼树的定义、哈夫曼树的构造过程和哈夫曼编码产生方法。
二.实验环境
装有Visual C++6.0的计算机一台。
三、实验内容与步骤
1、二叉树遍历递归算法:
假设二叉树采用二叉链存储结构存储,是设计一个算法,输出一棵给定二叉树的所有叶子节结点。
#include "stdafx.h"
#include "exam7-8.cpp"
int main(int argc, char* argv[])
{
    BTNode *b;
    CreateBTNode(b,"A(B(D(,G)),C(E,F))");
    printf("b:");DispBTNode(b);printf("\n");
    printf("从左到右输出所有叶子结点:");DispLeaf(b);printf("\n");
    printf("从右到左输出所有叶子结点:");DispLeaf1(b);printf("\n");
    return 0;
}
假设二叉树采用二叉树链式存储结构,设计一个算法输出从根结点到每个叶子结点的路径之逆(因为树中路径是从根结点到其他结点的结点序列,就是求叶子结点及其双亲结点、该双亲结点的双亲结点,直到根结点的序列,或者说求叶子结点及其所有祖先结点的序列)。要求采用后根遍历非递归算法。
#include "stdafx.h"
#include "exam7-12.cpp"
int main(int argc, char* argv[])
{
    BTNode *b;
    CreateBTNode(b,"A(B(D(,G)),C(E,F))");
    printf("b:");DispBTNode(b);printf("\n");
    printf("输出所有从叶子结点到根结点的序列:\n");
    AllPath1(b);
    return 0;
}
设计一个算法将二叉树的顺序存储结构转换成二叉链式存储结构。
#include "stdafx.h"
#include "exam7-14.cpp"
int main(int argc, char* argv[])
{
        int i,n=10;
    BTNode *b;
    SqBTree a;
    ElemType s[]="0ABCD#EF##G";
    for (i=0;i<=n;i++)
        a.data[i]=s[i];
    a.n=n;
    b=trans(a,1);
    printf("b:");DispBTNode(b);printf("\n");
    return 0;
}
四、实验过程与分析
1. 先序遍历
先序遍历二叉树的过程是:
(1) 访问根结点;(2) 先序遍历左子树;(3) 先序遍历右子树。
2. 中序遍历
中序遍历二叉树的过程是:
(1) 中序遍历左子树;(2) 访问根结点;(3) 中序遍历右子树。
3. 后序遍历
后序遍历二叉树的过程是:
(1) 后序遍历左子树;(2) 后序遍历右子树;(3) 访问根结点。
五、实验总结
通过此次试验我对二叉树的遍历有了一定的了解,仅有一个序列无法确定这棵二叉树的树形。但是,如果同时知道一棵二叉树的先序序列和中序序列,或者同时知道中序序列和后序序列,就能确定这棵二叉树。
六、指导教师评语及成绩
有完整的实验过程,运行出了正确的实验结果,很好的达到了实验的要求及实验目的。在实验过程中,该同学有效的发现了实验中的问题,并且很好的解决了问题,达到了培养解决问题的能力。
二叉树定义

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