编程语言
C++
问题描述
实验目的
熟悉C++语法,了解树的概念,掌握二叉树的运算及应用,了解前序中序后序遍历二叉树的递归/非递归原理,能够实现将二叉树左右子树结点交换。
实验内容
生成一棵以二叉链表存储的二叉树(至少15个结点)
分别用递归和非递归的方法前序、中序、后序遍历该二叉树,并打印各结点信息
编写算法,交换该二叉树上所有结点的左右子树,并打印交换后各结点的信息
程序设计
程序要求
生成一棵不少于15结点的二叉树,用二叉链表存储该二叉树。编写算法,利用递归算法实现该二叉树的前序中序后序遍历,并打印交换后各结点的信息。编写算法,利用非递归算法实现该二叉树的前序中序后序遍历,并打印交换后各结点的信息。编写算法,交换该二叉树上所有结点的左右子树,并打印交换后各结点的信息。
程序功能
生成二叉树,递归/非递归的前中后序遍历二叉树,交换二叉树上所有结点的左右子树
算法分析
二叉树的建立
定义一个节点(结点)类,类中有三种公有信息:char
型的data用来存储当前节点的数据,两个node*
指针型用来分别指向当前节点的左孩子和右孩子。
//定义节点类
class node
{
public:
int data; //节点信息
node* leftChild;//节点指针:左孩子
node* rightChild;//节点指针:右孩子
};
typedef node* BiTree;//等价,定义node*的新名字BiTree
创建结点的方法:
//创建节点,加*号的意义:返回类型指针型数据
node* createNode(int value)
{
node* q = new node;
q->leftChild = NULL; //leftChild指针为空
q->rightChild = NULL; //rightChild指针为空
q->data = value; //节点值等于value
return q; //返回节点
}
建立二叉树的方法(提供两种方法,一种使用默认28节点的二叉树,一种通过调节N的自左向右输入节点值来建立二叉树)
//建立二叉树
BiTree createBiTree()
{
node* p[N] = { NULL };
//int array[28] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 };//默认建立28节点二叉树
//自左向右输入节点值生成二叉树
cout<<"请按自左向右顺序输入二叉树各节点:"<<endl; //提示语
int array[N]; //定义array数组用于存储节点信息
for (int i = 0; i < N; ++i){
cin >> array[i]; //储存输入节点的值
}
for (int i = 0; i < N; ++i)
p[i] = createNode(array[i]); //创建节点
for (int i = 0; i < N / 2; i++)
{
p[i]->leftChild &#