📄 4.cpp
字号:
//4.先序、中序、后序遍历的递归算法
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct BTNode
{char data;
BTNode *lchild,*rchild;
}* BTree;
int CreateBTree(BTree &BT)
{//以先序次序输入二叉树中结点的值,
char ch=' '; scanf("%c",&ch);
if(ch==' ') BT=NULL;
else
{ if(!(BT=(BTNode *)malloc(sizeof(BTNode))))return 0;
BT->data=ch;
CreateBTree(BT->lchild);
CreateBTree(BT->rchild);
}return 1;
}
int xianTraverse(BTree BT)
{//先序遍历二叉树,显示先序序列;
if(BT)
{ cout<<BT->data<<' ';
if(xianTraverse(BT->lchild))
if(xianTraverse(BT->rchild)) return 1;
return 0;
}return 1;
}
int midTraverse(BTree BT)
{//中序遍历二叉树,显示中序序列;
if(BT)
{ if(midTraverse(BT->lchild))
{ cout<<BT->data<<' ';
if(midTraverse(BT->rchild))return 1;
}else return 0;
}
return 1;
}
int houTraverse(BTree BT)
{//后序遍历二叉树,显示后序序列;
if(BT)
{ if(houTraverse(BT->lchild))
if(houTraverse(BT->rchild))
{cout<<BT->data<<' '; return 1;}
else return 0;
}return 1;
}
void main(){
BTree T=NULL;
cout<<"输入二叉树的先序扩展序列:"<<endl;
if(!CreateBTree(T)) cout<<"建树出错!"<<endl;
cout<<"二叉树的先序序列为:"<<endl;
xianTraverse(T); cout<<"\t"<<endl;
cout<<"二叉树的中序序列为:"<<endl;
midTraverse(T); cout<<"\t"<<endl;
cout<<"二叉树的后序序列为:"<<endl;
houTraverse(T); cout<<"\n"<<endl;
}
//输入为 abc@d@@efg@@@@@@@(@表示空格)
//输出为 T的先序序列abcdefg
// T的中序序列cdbgfea
// T的后序序列dcgfeba
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -