#include<iostream>
using namespace std;
typedef struct BitNode
{
char data;
struct BitNode *lchild,*rchild;
}BitNode,*BitTree;
void CreatBitTree(BitTree &T) //先序建树
{
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=new BitNode[sizeof(BitNode)];
T->data=ch;
CreatBitTree(T->lchild);
CreatBitTree(T->rchild);
}
}
void preorder1_tree(BitTree T) {
if (T != NULL) {
cout << T->data << " ";
preorder1_tree(T->lchild);
preorder1_tree(T->rchild);
}
}
void inorder1_tree(BitTree T)
{
if (T != NULL) {
inorder1_tree(T->lchild);
cout << T->data << " ";
inorder1_tree(T->rchild);
}
}
void postorder1_tree(BitTree T)
{
if (T != NULL) {
postorder1_tree(T->lchild);
postorder1_tree(T->rchild);
cout << T->data << " ";
}
}
void preorder(BitTree T)
{
BitTree p, s[100];
int top = -1;
p = T;
while (p || top !=-1)
{
if (p)
{
cout << p->data << " ";
s[++top] = p;
p = p->lchild;
}else{
p = s[top--];
p = p->rchild;
}
}
}
void inorder(BitTree T)
{
BitTree p, s[100];
int top = -1;
p = T;
while (p || top != -1)
{
if (p)
{
s[++top] = p;
p = p->lchild;
}
else {
p=s[top--];
cout << p->data << " ";
p = p->rchild;
}
}
}
void postorder(BitTree T)
{
BitTree s[100];
int top=-1;
BitTree p=T;
BitTree r=NULL;
while(p||top!=-1)
{
if(p)
{
s[++top]=p;
p=p->lchild;
}
else{
p=s[top];
if(p->rchild&&p->rchild!=r)
{
p=p->rchild;
s[++top]=p;
p=p->lchild;
}
else{
p=s[top--];
cout<<p->data<<" ";
r=p;
p=NULL;
}
}
}
}
void levelorder(BitTree T)
{
BitTree p,q[100];
int front=0;
int rear =0;
q[rear]=T;
rear=(rear+1)%100;
while(front!=rear)
{
p=q[front];
front=(front+1)%100;
cout<<p->data<<" ";
if(p->lchild){
q[rear]=p->lchild;
rear=(rear+1)%100;
}
if(p->rchild){
q[rear]=p->rchild;
rear=(rear+1)%100;
}
}
}
int main()
{
BitTree T;
CreatBitTree(T);
cout<<endl;
preorder1_tree(T);
cout<<endl;
inorder1_tree(T);
cout<<endl;
postorder1_tree(T);
cout<<endl;
preorder(T);
cout<<endl;
inorder(T);
cout<<endl;
postorder(T);
cout<<endl;
levelorder(T);
return 0;
}
最简洁代码 树的各种遍历,递归非递归
最新推荐文章于 2023-05-14 15:20:50 发布