下面是在下参考一些书籍(零基础学数据机构)以及自己修改的代码,可能会有错,请见谅!
//////////////////////////////////// head.h //////////////////////////////////////
#include
using namespace std;
struct Node
{
char data;
Node *rchild;
Node *lchild;
};
typedef Node BiNode;
typedef Node* BiTree;
///建立一棵树(缺点:1,这棵树必须是满二叉树,要不然程序是不会退出的 2,必须手动输入)
void createTree(BiTree &T)
{
char c;
cout<<"input c :";
cin>>c;
if(c=='#')
{
T=NULL;
}
else
{
T=(BiTree ) malloc (sizeof(BiNode));
if(!T)
{
exit(-1);
}
T->data=c;
createTree(T->lchild);
createTree(T->rchild);
}
}
///二叉树的先序遍历
void preOrderTraverse(BiTree T)
{
if(T)///如果那棵树不是空
{
cout<data<<" ";
preOrderTraverse(T->lchild);
preOrderTraverse(T->rchild);
///先读根,之后读左子树,最后是右子树
}
}
///中序遍历
void inOrderTraverse(BiTree T)
{
if(T)
{
inOrderTraverse(T->lchild);
cout<data<<" ";
inOrderTraverse(T->rchild);
}
}
///后序遍历
void postOrderTraverse(BiTree T)
{
if(T)
{
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
cout<data<<" ";
}
}
/////////////////////////// main.cpp ///////////////////////////////////////
#include "head.h"
void createTree(BiTree &T);
void preOrderTraverse(BiTree T);
void inOrderTraverse(BiTree T);
void postOrderTraverse(BiTree T);
void main()
{
BiTree T;
cout<<"////////////现在创建二叉树//////////"<
createTree(T);
cout<<"先序遍历:";
preOrderTraverse(T);
cout<
cout<<"中序:";
inOrderTraverse(T);
cout<
cout<<"后序:";
postOrderTraverse(T);