说明:算法中用到了结构体,也用到了递归的方法,你看看怎么样,祝你好运!
#include"stdio.h"
typedef
char
elemtype
typedef
struct
node
//定义链表结构
{
elemtype
data
//定义节点值
struct
note
*lchild
//定义左子节点值
struct
note
*rchild
//定义右节点值
}btree
preorder(btree
*root)
//前序遍历
{
if(roof!=null)
//如果不是空节点
{
printf("%c\n",root->data)
//输出当前节点
preorder(root->lchild)
//递归前序遍历左子节点
preorder(root->rchild)
//递归前序遍历右子节点
}
return
//结束
}
#include<iostream>using
namespace
std
#define
OK
1
#define
ERROR
0
#define
OVERFLOW
-1
typedef
int
Status
typedef
char
TElemType
typedef
struct
TreeNode{
//定义的树结点
TElemType
Data
struct
TreeNode
*lchild,*rchild
}TreeNode,*Treep
Treep
CreateTree(Treep
&T)
//使用先序遍历优势创建
{
char
ch
//
cout<<"\n请你输入你要创建的树元素:"
cin>>ch
if(ch
==
'#')
//若是"#",代表该节点为空
T
=
NULL
else
{
T
=
new
TreeNode
//申请空间
if(!T)
return
ERROR
//空间申请失败返回错误信息
T->Data
=
ch
//键盘输入结点信息
CreateTree(T->lchild)
//递归调用创建左子树
CreateTree(T->rchild)
//递归调用创建右子树
}
return
T
}
void
TreeTreaverseF(Treep
T)
//二叉树先序遍历
{
if(T)
{
cout<<T->Data
//输出根节点值
TreeTreaverseF(T->lchild)
//递归调用输出左子树
TreeTreaverseF(T->rchild)
//递归调用输出右子树
}
}
void
TreeTreaverseS(Treep
T)
//中序遍历二叉树
{
if(T)
{
TreeTreaverseS(T->lchild)
//递归调用输出左子树
cout<<T->Data
//输出左节点
TreeTreaverseS(T->rchild)
//递归调用输出右子树
}
}
void
TreeTreaverseT(Treep
T)
{
if(T)
{
TreeTreaverseT(T->lchild)
//递归调用输出左子树
TreeTreaverseT(T->rchild)
//递归调用输出右子树
cout<<T->Data
//输出右节点
}
}
int
main()
{
Treep
T=NULL
cout<<"\n开始创建树状结构...\n"
cout<<"\n各元素以空格隔开\n"
CreateTree(T)
cout<<"\n先序遍历输出树...\n"
TreeTreaverseF(T)
cout<<endl<<endl
cout<<"\n中序遍历输出树...\n"
TreeTreaverseS(T)
cout<<endl<<endl
cout<<"\n后序遍历输出树...\n"
TreeTreaverseT(T)
cout<<endl<<endl
return
0
}