一、 实验目的
1. 熟悉二叉树的链式存储结构
2. 掌握二叉树的建立、深度优先递归遍历等算法
3. 能够利用遍历算法实现一些应用
二、 实验内容
1. 已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。
2. 采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。
//bitree.h
//本头文件包含binode类和二叉链表bitree类
#include<iostream>
using namespace std;
template<class T>
struct binode
{
T data; //存储数据
binode<T> * lchild,* rchild; //左孩子,右孩子
};
template<class T>
class bitree
{
private:
binode<T> * root; //指向根节点的头指针
int allsum;//节点总数
int yesum;//叶子节点总数
int a;
binode<T> * creat(binode<T> *bt); //构造函数调用
void release(binode<T> *bt); //析构函数调用
void preorder(binode<T> *bt); //前序遍历函数调用
void inorder(binode<T> *bt); //中序遍历函数调用
void postorder(binode<T> *bt);//后序遍历函数调用
void exchange(binode<T> *bt);//交换左右子树,实验五第一问
int sum(binode<T> *bt);//节点总数,实验五第二问
int ysum(binode<T> *bt);//叶子节点总数,实验五第二问
int px(binode<T> *bt);
public:
bitree(){root=creat(root);} //构造函数
~bitree(){release(root);} //析构函数
void preorder(){preorder(root);} //前序遍历函数
void inorder(){inorder(root);} //中序遍历函数
void postorder(){postorder(root);} //后序遍