大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.
近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
1)打印二叉树
2)完成二叉树的先序、中序、后序遍历操作
1) 数据输入(输入哪些数据、个数、类型、来源、输入方式)
从键盘输入,二叉树的节点元素值;
分别输出二叉树前序、中序、后序遍历的结果。
2) 数据存储(输入数据在内存中的存储)
定义二叉树结构体:
//二叉树结构体的定义
typedef struct Node
{
char data; //定义一个字符型的元素
struct Node *lchild; //定义一个左孩子,指针类型
struct Node *rchild; //定义一个右孩子,指针类型
}Node, *BiTree; //BiTree是结构体的指针
使用二叉树的链式存储结构进行节点存储
3) 数据处理(说明处理步骤。若不是非常简单,需要绘制流程图)
前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。根----->左------->右
中序遍历:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后中序遍历右子树。左----->根------->右
后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子结点后结点的方式遍历访问左右子树,最后访问根结点。左------>右------>根
4) 数据输出(贴图:程序运行结果截图。图幅大小适当,不能太大)
#include<iostream>
#include<malloc.h>
using namespace std;
//二叉树结构体的定义
typedef struct Node
{
char data; //定义一个字符型的元素
struct Node *lchild; //定义一个左孩子,指针类型
struct Node *rchild; //定义一个右孩子,指针类型
}Node, *BiTree; //BiTree是结构体的指针
void create(BiTree &bt);
void visit(BiTree bt);
void PreOder(BiTree bt);
void InOder(BiTree bt);
void PostOrder(BiTree bt);
void DeleteTree(BiTree bt);
int main()
{
BiTree bt = NULL; //创建一个二叉树指针类型的对象
cout << "创建以下二叉树:" << endl;
cout << " a" << endl;
cout << " / \\" << endl;
cout << " b c" << endl;
cout << " / \\ / \\" << endl;
cout << " d e f g" << endl;
cout << "/ \\ / " << endl;
cout << "h i j" << endl;
cout << "输入结点二叉树节点数据:abdh i ej cf g:" << endl;
//create(bt); //创建二叉树
cout << "先序排序后的结果为:abdhiejcfg" << endl;
//PreOder(bt); //调用先序排序函数
cout << endl;
cout << "中序排序后的结果为:hdibjeafcg" << endl;
//InOder(bt); //调用中序排序函数
cout << endl;
cout << "后序排序后的结果为:hidjebfgca" << endl;
//PostOrder(bt); //调用后序排序函数
system("pause");
return 0;
}
//创建函数,构建二叉树
void create(BiTree &bt)
{
char ch;
cin >> ch;
if (ch == ' ')
{
bt = NULL;
}
else
{
bt = (Node *)malloc(sizeof(Node));
bt->data = ch; //把得到的值作为该位置的元素
create(bt->lchild); //创建左孩子
create(bt->rchild); //创建 右孩子
}
}
void visit(BiTree bt)
{
cout << bt->data;
}
//先序遍历
void PreOder(BiTree bt)
{
if (bt) //判断该位置是否存在
{
visit(bt); //如果该位置存在,则输出
PreOder(bt->lchild); //对左孩子进行先序遍历
PreOder(bt->rchild); //对右孩子进行先序遍历
}
}
//中序遍历
void InOder(BiTree bt)
{
if (bt)
{
InOder(bt->lchild); //对左孩子进行中序遍历
visit(bt); //打印出根结点
InOder(bt->rchild); //对左孩子进行中序遍历
}
}
//后序遍历
void PostOrder(BiTree bt)
{
if (bt)
{
PostOrder(bt->lchild); //对左孩子进行后序遍历
PostOrder(bt->rchild); //对左孩子进行后序遍历
visit(bt); //打印出根结点
}
}
void DeleteTree(BiTree bt)
{
//
// 利用递归实现后序遍历算法
//
if (bt != NULL)
{
DeleteTree(bt->lchild);
DeleteTree(bt->rchild);
free(bt);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/123404220
内容来源于网络,如有侵权,请联系作者删除!