一、实验目的
1.理解二叉树的逻辑结构和存储结构;
2.熟练掌握二叉树的生成、遍历等常见操作
二、实验原理
1.二叉树是一种最常用的树形结构,是n个节点的有限结合。对于非空树有:
(1)有一个特定的称为根的节点;
(2)根节点以外的其余节点分别是由两棵互不相交的称为左子树和右子树的二叉树组成。
2.二叉树有两种存储结构:顺序存储和链式存储。顺序存储就是把二叉树的所有节点按照层次顺序存储到连续的存储单元中,这种更适用于完全二叉树。链式存储又称二叉链表,每个节点包括两个指针,分别指向其左孩子和右孩子。链式存储是二叉树常用的存储结构。
3.二叉树的定义满足递归定义,二叉树的建立、遍历等操作都是采用递归定义分算法。
三、实验内容及步骤
(一)实验内容
1. 练习二叉树的建立与存储
2. 练习二叉树的遍历
(二)实验步骤
建立二叉树,并通过调用函数,输出先序遍历、中序遍历与后序遍历的结果。根据给出的中序遍历算法编写后序遍历的算法。
#include<iostream>
using namespace std;
typedef struct BiNode{ //二叉链表定义
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
//用算法5.3 先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T){
//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
char ch;
cin >> ch;
if(ch=='#') T=NULL; //递归结束,建空树
else{
T=new BiTNode;
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
} //else
} //CreateBiTree
void InOrderTraverse(BiTree T){
//中序遍历二叉树T的递归算法
if(T){
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
int main()
{
BiTree tree;
cout<<"请输入建立二叉链表的序列:\n";
CreateBiTree(tree);
cout<<"中序遍历的结果为:\n";
InOrderTraverse(tree);
cout<<endl;
}