实验目的
掌握二叉树的动态链表存储结构及表示;
掌握二叉树的三种遍历算法(递归和非递归两类);
运用二叉树三种遍历的方法求解有关问题。
第一关:头文件基本函数的实现
#pragma once
using namespace std;
namespace exa{
struct bnode {
struct bnode * lchild, * rchild;
char data;
};
typedef bnode * bitre;
//读取扩展二叉树的先序序列来构建原二叉树
static void load_bitre(bitre & t) {
}
//输出二叉树的先序和后序遍历序列
//输出格式为:
//PreOrder:
//InOrder:
static void display_bitre(bitre & root) {
void Preorder(BinTree T){//先序遍历
}
第二关:访问二叉树的叶子节点
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
void visite_leaf(bitre t)
{
//Blank 1
{
if //Blank 2
cout << t->data << endl;
visite_leaf(t->lchild); // 递归调用算法对左子树执行
visite_leaf(t->rchild); // 递归调用算法对右子树执行
}
}
void solve()
{
bitre t;
load_bitre(t); // 取出二叉树
display_bitre(t); // 显示二叉树
visite_leaf(t); // 调用算法运行以检验
}
}
第三关:先序遍历二叉树
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
void bitrepreorder(bitre t)
{
while (t != NULL){
bitrepreorder(t->lchild); // 递归调用算法对t的左子树执行算法
putchar(t->data);
bitrepreorder(t->rchild); // 递归调用算法对t的右子树执行算法
}
}
void solve()
{
bitre t;
load_bitre(t);
display_bitre(t);
bitrepreorder(t);
puts("");
}
}
第四关:求二叉树的高度
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
int solve(bitre & t) {
}
}
第五关:中序遍历二叉树
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
void solve(bitre & t) {
}
}
第六关:顺序存储二叉树转二叉链表
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
bitre solve(char * c, int n) {
}
}
第七关:复制二叉树
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
bitre solve(bitre & t) {
}
}
第八关:交换二叉树的左右子指针
#include "test.h"
#include "../btrechar.h" // 引用库函数文件
namespace exa { //请在命名空间内编写代码,否则后果自负
void solve(bitre & t) {
}
}