目录
一、实验目的
- 掌握二叉树的非线性和递归特点。
- 熟练掌握二叉树的存储结构。
- 熟练掌握二叉树的各种遍历操作和其它操作的实现方法。
二、实验要求
二叉树的括号表示为:Str="A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))",同学们可以自己定义,请实现二叉树下列基本运算:
(1)创建二叉树;
(2)先序、中序、后序遍历二叉树(任选一个),输出遍历结果;
(3)层次遍历二叉树;
(4)求结点的总个数或叶子结点的个数;
(5)查找值为X的结点;
(6)删除data域为x的结点及其子孙结点并输出;
(7)求二叉树的宽度;
(8)求二叉树的高度;
(9)输出所有从叶子结点到根节点的路径;
(10)销毁二叉树。以上实验任务可以任选其中的5个子任务,有能力者可以全部完成。
三、核心代码
//先序遍历二叉树
void PreOrder(BTNode *b)
{
if(b!=NULL)
{
printf("%c",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
//二叉树结点总个数
int Nodes(BTNode *b)
{
if(b==NULL) return 0;
else return Nodes(b->lchild)+Nodes(b->rchild)+1;
}
//删除结点及其子节点
void FreeNode(BTNode *&b)
{
if(b!=NULL)
{
FreeNode(b->lchild);
FreeNode(b->rchild);
free(b);
b=NULL;
}
}
//查找值为x的结点并删除
bool FindNode(BTNode *&b,char x)
{
if(b==NULL)
return false;
if(b->data==x)
{
FreeNode(b);
printf("已经找到此结点!\n");
return true;
}
else if(FindNode(b->lchild,x)) return true;
else if(FindNode(b->rchild,x)) return true;
else return false;
}
四、实验记录
五、总结
通过此次实验我掌握二叉树的非线性和递归特点:二叉树是一种非线性的数据结构,它不满足线性关系。在二叉树中,每个节点最多有两个子节点,分别是左子节点和右子节点。二叉树的遍历和操作可以通过递归来实现。前序遍历、中序遍历和后序遍历都是通过递归实现的。
六、完整报告和成果文件提取链接
完整可运行代码以及相关实验报告以下链接可获取:
链接:https://pan.baidu.com/s/1DuGfYm6_KDm04gUKWFSSVQ?pwd=lw6u
提取码:lw6u