#include"../utili.h"
typedef struct BinTreeNode//定义结点
{
ElemType data;
BinTreeNode *leftChild;
BinTreeNode *rightChild;
}BinTreeNode;
typedef struct BinTree//定义树
{
BinTreeNode *root;
ElemType refval;//stop flag
}BinTree;
///
void init_tree(BinTree *t,ElemType ref);//初始化树
void create_tree(BinTree *t);
void create_tree(BinTree *bt,BinTreeNode **t);//创建树
void preorder(BinTree *bt);
void preorder(BinTreeNode *t);//先序
void inorder(BinTree *bt);
void inorder(BinTreeNode *t);//中序
void postorder(BinTree *bt);
void postorder(BinTreeNode *t);//后序
///
void init_tree(BinTree *t,ElemType ref)
{
t->root = NULL;
t->refval = ref;
}
void create_tree(BinTree *t)
{
create_tree(t,&(t->root));
}
void create_tree(BinTree *bt,BinTreeNode **t)//利用先序的方法递归创建树
{
ElemType Item;
cin>>Item;
if(Item == bt->refval)
*t == NULL;
else
{
*t = (BinTreeNode*)malloc(sizeof(BinTreeNode));
assert(t != NULL);
(*t)->data = Item;
create_tree(bt,&(*t)->leftChild);
create_tree(bt,&(*t)->rightChild);
}
}
void preorder(BinTree *bt)
{
preorder(bt->root);
}
void preorder(BinTreeNode *t)//先序:先访问根,在访问左子树,最后是右子树;
{
if(t != NULL)
{
cout<<t->data<<" ";
preorder(t->leftChild);
preorder(t->rightChild);
}
}
void inorder(BinTree *bt)
{
inorder(bt->root);
}
void inorder(BinTreeNode *t)//中序:左->根->右;
{
if(t != NULL)
{
inorder(t->leftChild);
cout<<t->data<<" ";
inorder(t->rightChild);
}
}
void postorder(BinTree *bt)
{
postorder(bt->root);
}
void postorder(BinTreeNode *t)后序:左->右->根;
{
if(t != NULL)
{
postorder(t->leftChild);
postorder(t->rightChild);
cout<<t->data<<" ";
}
}
typedef struct BinTreeNode//定义结点
{
ElemType data;
BinTreeNode *leftChild;
BinTreeNode *rightChild;
}BinTreeNode;
typedef struct BinTree//定义树
{
BinTreeNode *root;
ElemType refval;//stop flag
}BinTree;
///
void init_tree(BinTree *t,ElemType ref);//初始化树
void create_tree(BinTree *t);
void create_tree(BinTree *bt,BinTreeNode **t);//创建树
void preorder(BinTree *bt);
void preorder(BinTreeNode *t);//先序
void inorder(BinTree *bt);
void inorder(BinTreeNode *t);//中序
void postorder(BinTree *bt);
void postorder(BinTreeNode *t);//后序
///
void init_tree(BinTree *t,ElemType ref)
{
t->root = NULL;
t->refval = ref;
}
void create_tree(BinTree *t)
{
create_tree(t,&(t->root));
}
void create_tree(BinTree *bt,BinTreeNode **t)//利用先序的方法递归创建树
{
ElemType Item;
cin>>Item;
if(Item == bt->refval)
*t == NULL;
else
{
*t = (BinTreeNode*)malloc(sizeof(BinTreeNode));
assert(t != NULL);
(*t)->data = Item;
create_tree(bt,&(*t)->leftChild);
create_tree(bt,&(*t)->rightChild);
}
}
void preorder(BinTree *bt)
{
preorder(bt->root);
}
void preorder(BinTreeNode *t)//先序:先访问根,在访问左子树,最后是右子树;
{
if(t != NULL)
{
cout<<t->data<<" ";
preorder(t->leftChild);
preorder(t->rightChild);
}
}
void inorder(BinTree *bt)
{
inorder(bt->root);
}
void inorder(BinTreeNode *t)//中序:左->根->右;
{
if(t != NULL)
{
inorder(t->leftChild);
cout<<t->data<<" ";
inorder(t->rightChild);
}
}
void postorder(BinTree *bt)
{
postorder(bt->root);
}
void postorder(BinTreeNode *t)后序:左->右->根;
{
if(t != NULL)
{
postorder(t->leftChild);
postorder(t->rightChild);
cout<<t->data<<" ";
}
}