二叉树的遍历与创建
近日刷计算机二级题目时做到一些有关二叉树的,忘的都差不多了,于是复习了一下。看了下以前写代码,‘#’代表空结点。代码如下:
#include<iostream.h>
#include<malloc.h>
#define datatype char
typedef struct node
{
datatype data;
struct node *lchild,*rchild;
}BTNode,*BTREE;
void preorder(BTREE T)//前序遍历模块
{
if(T)
{
cout<<T->data;
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BTREE T)//中序遍历模块
{
if(T)
{
inorder(T->lchild);
cout<<T->data;
inorder(T->rchild);
}
}
void postorder(BTREE T)//后序遍历
{
if(T)
{
postorder(T->lchild );
postorder(T->rchild);
cout<<T->data;
}
}
void creat(BTREE &T)//创建二叉树
{
datatype ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=(BTREE)malloc(sizeof(BTNode));
T->data=ch;
creat(T->lchild);
creat(T->rchild);
}
}
void main()
{
BTREE T;
int n;
while(1)
{
cout<<"0.创建二叉树.\n";
cout<<"1.前序遍历二叉树。\n";
cout<<"2.中序遍历二叉树。\n";
cout<<"3.后序遍历二叉树。\n";
cout<<"9.退出.\n";
cin>>n;
switch(n)
{
case 0:
creat(T);
break;
case 1:
//递归、非递归
preorder(T);
break;
case 2:
//递归、非递归
inorder(T);
break;
case 3:
postorder(T);
break;
case 9:
return;
}
}
}
果然学习还是要温故而知新。
2021.3.2