当前位置:文档之家› 实验八:二叉树的遍历与应用

实验八:二叉树的遍历与应用

{
}
voidInOrder(BitTreebt)
/*中序遍历二叉树*/
{
}
voidPostOrder(BitTreebt)
/*后序遍历二叉树*/
{
}
Step2:创建文件tree.c,编写测试遍历操作的主函数。
main()clrscr()CreateBiTree()PreOrder()InOrder()PostOrder()inຫໍສະໝຸດ maxvalue(BitTreebt)
6.编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。(首先在遍历过程中找到值为x结点,然后调用Get_Depth(),求得值为x的结点为根的子树的深度)。
注意:后面有算法的过程与步骤,请填空。
7.编写算法,实现二叉链表的先序非递归遍历。
voidPreOrderBiTree(BitTreeT)
typedefcharTElemType;
typedefstructBitNode
{TElemTypedata;
structBitNode*lchild, *rchild;
}BitNode,*BitTree;
/*BitTreebt;根结点指针,标识二叉链表*/
/*建立二叉树*/
BitTreeCreateBiTree(void)
/*调用CreateBiTree()创建二叉树*/
printf(“Create a tree inpreorder,pleaseinput data:”);

printf(“x=”);
scanf(“%c”,&x);
/*调用Get_Sub_Depth()实现求值为x的结点为根的子树深度的操作*/
;
}
三、实验题目
1.编写算法,按层输出一棵顺序存储的二叉树所有结点的值。
/**********level.c************/
#include <stdio.h>
#defineVirNode0 /*虚结点值*/
#define MAXSIZE 100 /*一维数组的容量*/
typedefintTElemType; /*二叉树结点值的类型*/
/***************tree.c*************/
#include“tree.h”
#include <windows.h>
voidmain()
{BitTreebt;
system(“CLS”); //清屏
/*调用CreateBiTree()创建二叉树*/
printf(“Create a tree inpreorder,pleaseinput data:”);
8.编写算法,对先序线索二叉树进行先序后继线索遍历。
voidthpreorder(BiThrTreeT)
四、基本思想、原理和算法描述
要求写出题目1、2、3的算法的设计思想。
五、源程序及测试结果
各题目的源程序
各题目的测试结果
六、算法性能分析
要求写出各题目的算法性能分析。
七、实验总结
总结调试过程中遇到的问题是如何解决的;以及对设计与实现的回顾讨论和分析;心得和体会。
实验8二叉树的遍历与应用
一、实验目的
1.进一步掌握指针变量的含义。
2.掌握二叉树的结构特征,理解并熟悉掌握创建二叉树和实现二叉树的三种遍历。
3.学会编写实现二叉树基本操作的递归算法,领会递归的实质。
二、实验要求
1.给出程序设计的基本思想、原理和算法描述。
2.源程序给出注释。
3.保存和打印出程序的运行结果,并结合程序进行分析。

/*调用PreOrder()先序遍历二叉树*/
printf(“The preorder:”);
;
/*调用InOrder()中序遍历二叉树*/
printf(“Theinorder:”);

printf("\n");
/*调用PostOrder()后序遍历二叉树*/
printf(“Thepostorder:”);
{/*输入先序序列建立二叉树*/
BitTreebt;
TElemTypech;
scanf("%c", &ch);
if (ch=='%')bt=NULL;
/*安排空指针*/
else
{ /*add codes*/
}
return (bt);
}
voidPreOrder(BitTreebt)
/*先序遍历二叉树*/
;
printf("\n");
}
题目6:编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。(首先在遍历过程中找到值为x结点,然后调用Get_Depth(),求得值为x的结点为根的子树的深度)。
/*****getsubdepth.c*****/
#include“tree.h”
voidGet_Sub_Depth(BiTreeT,TElemTypex)
[实验步骤提示]
题目2:以二叉链表为存储结构实现二叉树的三种遍历(先序、中序、后序)的递归算法。
Step1:建头文件tree.h,存放树的基本操作的定义。
/**********tree.h************/
#include <stdio.h>
#include <stdlib.h>
/*二叉链表的类型定义*/
2.以二叉链表为存储结构实现二叉树的三种遍历(先序、中序、后序)的递归算法。将tree.h和tree.c文件补充完整。
3.编写算法,按层次遍历一棵二叉链表。
4.编写算法,输出二叉树中所有度为2的结点。
voidprintdata(BitTreebt)
5.编写算法,求二叉树中结点的最大值。假设结点为整型。
typedefTElemTypeSqBitTree[MAXSIZE];
/*SqBitTree:顺序存储的二叉树类型名*/
voidleveltree(SqBitTreebt)
{}
void main()
{SqBitTreebb={15,1,2,3,4,5,0,0,8,0,0,11,0,0,0,0};
;
}
/*求二叉树中以值为x的结点为根的子树深度*/
/*以遍历方式找到值为x的结点,然后调用Get_Depth()得到以结点x为根的子树深度*/
{
}
intGet_Depth(BiTreeT)/*求树T深度的递归算法*/
{
}/*Get_Depth*/
main()
{BitTreebt;TElemTypex
clrscr();
相关主题