该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二叉树链表类,没有写主函数
#include "stdlib.h"
#include "stdio.h"
#include "iostream"
using namespace std;
template
struct BTnode
{
T d;
struct BTnode *left; //左指针域
struct BTnode *right;//右指针域
};
template
class Binary_Tree
{
public:
Binary_Tree(){ head = NULL; } //构造函数,初始化二叉树链表为空
void create_Binary_Tree(); //建立二叉树链表
void pre_trav_Binary_Tree(); //前序遍历
void in_trav_Binary_Tree(); //中序遍历
void pos_trav_Binary_Tree(); //后序遍历
private:
struct BTnode *head; //头指针
};
template
void Binary_Tree::create_Binary_Tree(T end)
{
T x;
cin >> x; //输入第一个结点值
if(x == end) return; //第一个结点值为结束符号
p = new struct BTnode; //申请空间存储二叉树结点
p->d = x;p->left = NULL; p->right = NULL;
head = p; //二叉树根结点
create(p,1,end); //输入左结点值
create(p,2,end); //输入右结点值
}
template
static create(struct BTnode *p,int k,T end)
{
BTnode *p; //二叉数结点
T x;
if(x != end)
{
q = new BTnode; //申请新结点
q->d = x; q->right = NULL; q->left = NULL;
if(k == 1) p->left = q; //连接到左子树
if(k == 2) p->right = q;//连接到右子树
create(q,1,end); //输入左子树结点值
create(q,2,end); //输入右子树结点值
}
return 0;
}
//前序遍历
template
void Binary_Tree::pre_trav_Binary_Tree()
{
BTnode *p;
p = head;
pre_trav(p);
cout <
return;
}
template
static pre_trav(BTnode *p)
{
if(p != NULL)
{
cout <d <
pre_trav(p->left); //遍历左子树
pre_trav(p->right); //遍历右子树
}
return 0;
}
//中序遍历
template
void Binary_Tree::in_trav_Binary_Tree()
{
BTnode *p;
p = head;
in_trav(p);
cout <
return;
}
template
static in_trav(BTnode *p)
{
if(p != NULL)
{
in_trav(p->left);
cout <d <
in_trav(p->right);
}
return 0;
}
//后序遍历
template
void Binary_Tree::pos_trav_Binary_Tree()
{
BTnode *p;
p = head;
pos_trav(p);
cout <
return;
}
template
static pos_trav(BTnode *p)
{
if(p != NULL)
{
pos_trav(p->left);
cout <d <
pos_trav(p->right);
}
return 0;
}