// Binary Tree.cpp : Defines the entry point for the console application.
/*-----CODE FOR FUN---------------
-------CREATED BY Dream_Whui------
-------2015-2-6-------------------*/
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFEASIBLE -1
#define TElemType char
typedef struct BiTNode//定义二叉树的结构
{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左子树,右子树
}BiTNode,*BiTree;
int CreateBiTree(BiTree &T)//按先序创建二叉树
{
char ch;
cin>>ch;
if(ch=='#')//表示空结点
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTree));
if(!T)
return ERROR;
T->data = ch;//先创建根
CreateBiTree(T->lchild);//再左子树
CreateBiTree(T->rchild);//再右子树
}
return OK;
}
int Visit(TElemType e)
{
cout<<e<<" ";
return OK;
}
//int PreOrderTraverse(BiTree T, int(*Visit)(TElemType))//先序遍历
//{
// if(T)
// {
// if(Visit(T->data))
// if(PreOrderTraverse(T->lchild,Visit))
// if(PreOrderTraverse(T->rchild,Visit))
// return OK;
// return ERROR;
// }
// else
// return OK;
//}
int PreOrderTraverse(BiTree T, int(*Visit)(TElemType))//先序遍历
{
if(T)
{
Visit(T->data);//先访问根
PreOrderTraverse(T->lchild,Visit);//再访问左子树
PreOrderTraverse(T->rchild,Visit);//最后右子树
}
return OK;
}
//int InOrderTraverse(BiTree T, int(*Visit)(TElemType))//中序遍历
//{
// stack<BiTree> S;
// BiTree p = T;
// while(p || !S.empty())
// {
// if(p)
// {
// S.push(p);
// p = p->lchild;
// }
// else
// {
// p = S.top();
// S.pop();
// Visit(p->data);
// p = p->rchild;
// }
// }
// return OK;
//}
int InOrderTraverse(BiTree T, int(*Visit)(TElemType))//中序遍历
{
if(T)
{
InOrderTraverse(T->lchild,Visit);//先访问左子树
Visit(T->data);//再根
InOrderTraverse(T->rchild,Visit);//最后右子树
}
return OK;
}
int PostOrderTraverse(BiTree T, int(*Visit)(TElemType))//后序遍历
{
if(T)
{
PostOrderTraverse(T->lchild,Visit);//先访问左子树
PostOrderTraverse(T->rchild,Visit);//再右子树
Visit(T->data);//最后根
}
return OK;
}
int main(int argc, char* argv[])
{
BiTree T;
CreateBiTree(T);
PreOrderTraverse(T,Visit);
cout<<endl;
InOrderTraverse(T,Visit);
cout<<endl;
PostOrderTraverse(T,Visit);
cout<<endl;
return 0;
}
数据结构--二叉树
最新推荐文章于 2022-10-27 20:55:45 发布