#include <iostream>
#include <stdio.h>
using namespace std;
struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;//左右孩子
};
BiTNode *T; //指向结构体(节点)的指针
void CreateBiTree(BiTNode* &T);
void PreOrder(BiTNode* &T);
void InOrder(BiTNode* &T);
void PosOrder(BiTNode* &T);
//==================主函数==================
int main()
{
cout<<"创建一课二叉树"<<endl;
CreateBiTree(T);
cout<<endl;
cout<<"前序遍历"<<endl;
PreOrder(T);
cout<<endl;
cout<<"中序遍历"<<endl;
InOrder(T);
cout<<endl;
cout<<"后序遍历"<<endl;
PosOrder(T);
cout<<endl;
return 0;
}
//创建函数,假设按前序遍历输入
void CreateBiTree(BiTNode* &T)
{
char ch;
scanf("%c",&ch); //这里输入只能用scanf 和 getchar,不能用cin,不然会输入不完
if (ch == ' ') T = NULL;
else
{
T = new BiTNode;
T->data = ch;//读入当前节点的数据
CreateBiTree(T->lchild);//递归创建左子树
CreateBiTree(T->rchild);//递归创建右子树
}
}
//========================前序遍历 ===========================
void PreOrder(BiTNode* &T)
{
if (T)
{
cout<<T->data;//访问当前节点
PreOrder(T->lchild);//前序遍历左子树
PreOrder(T->rchild);//前序遍历右子树
}
else cout<<"";
}
//=========================中序遍历 ===========================
void InOrder(BiTNode* &T)
{
if (T)
{
InOrder(T->lchild);
cout<<T->data;
InOrder(T->rchild);
}
else cout<<"";
}
//==========================后序遍历 ===========================
void PosOrder(BiTNode* &T)
{
if (T)
{
PosOrder(T->lchild);
PosOrder(T->rchild);
cout<<T->data;
}
else cout<<"";
}
二叉树的创建与遍历
最新推荐文章于 2022-03-26 19:05:43 发布