版权申明:
本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。
实验五 二叉树
实验目的:
掌握先序遍历二叉树方法实现二叉树的二叉链表存储;掌握二叉树的三种遍历方法。
实验内容:
1. 通过结构体声明二叉树结点;
2. 创建并存储二叉树;
3. 实现二叉树的先序、中序和后序遍历。
源码:
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int Status;
typedef char TElemType;
/******创建节点******/
typedef struct BiTNode{
TElemType data; //存放值
struct BiTNode *lchild, *rchild; //左右孩子
}BiTNode, *BiTree;
/******输出元素e的值******/
Status PrintElem(TElemType e){
cout << e << " ";
return OK;
}
/******创建二叉树******/
Status CreateBiTree(BiTree &T){
TElemType ch;
ch = cin.get();
//scanf("%c", &ch);
if(ch == ' ')
T = NULL; //输入为空格表示数值为空
else{
T = (BiTNode *)malloc(sizeof(BiTNode)); //分配节点空间
if(!T)
exit(OVERFLOW); //分配失败
T->data = ch; //根节点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
return OK;
}
/******先序遍历二叉树(递归)******/
Status PreOrderTraverse(BiTree T, Status( *Visit )(TElemType e)){
if(T){
PrintElem(T->data);
PreOrderTraverse(T->lchild, Visit);
PreOrderTraverse(T->rchild, Visit);
return OK;
}
}
/******中序遍历二叉树(递归)******/
Status InOrderTraverse(BiTree T, Status( *Visit )(TElemType e)){
if(T){
InOrderTraverse(T->lchild, Visit);
PrintElem(T->data);
InOrderTraverse(T->rchild, Visit);
return OK;
}
}
/******后序遍历二叉树(递归)******/
Status PostOrderTraverse(BiTree T, Status( *Visit )(TElemType e)){
if(T){
PostOrderTraverse(T->lchild, Visit);
PostOrderTraverse(T->rchild, Visit);
PrintElem(T->data);
return OK;
}
}
int main()
{
BiTree T;
cout << "Input preoder string: " << endl;
CreateBiTree(T);
cout << "Preorder: " << endl;
PreOrderTraverse(T, PrintElem);
cout << endl;
cout << "Inorder: " << endl;
InOrderTraverse(T, PrintElem);
cout << endl;
cout << "Postorder: " << endl;
PostOrderTraverse(T, PrintElem);
cout << endl;
return 0;
}
运行结果: