(17条消息) 『西工大-数据结构-NOJ』 017-输出以二叉树表示的算术表达式(耿6.51) 『西北工业大学』__LanXiu的博客-CSDN博客
上面是我参考的一位学长的博客。
先序建立二叉树,然后中序遍历二叉树
(1)先(根)序遍历(根左右)
(2)中(根)序遍历(左根右)
(3)后(根)序遍历(左右根)
上面参考(17条消息) 二叉树的先序、中序、后序遍历序列_bebr的博客-CSDN博客_二叉树的先序,中序,后序遍历
先序建立的二叉树是这样子的:
好了,源码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef char DataType;
typedef struct BinTreeNode{
DataType info;
struct BinTreeNode* lchild;
struct BinTreeNode* rchild;
}BinTreeNode,*PBinTreeNode;
void InitializeBinTreeNode(PBinTreeNode PNode){
//初始化二叉树中的单个结点
PNode->info='0';
PNode->lchild=NULL;
PNode->rchild=NULL;
}
PBinTreeNode CreateBinTreeNode(){
//创建二叉树中的单个结点
PBinTreeNode PNode=(PBinTreeNode)malloc(sizeof(BinTreeNode));
if(PNode==NULL){
printf("out of space!");
}else{
InitializeBinTreeNode(PNode);
return PNode;
}
}
PBinTreeNode BinTreeBuilding(){
//创建一棵完整二叉树
char s=getchar();
if(s!='#'){
PBinTreeNode cur=CreateBinTreeNode();
cur->info=s;
cur->lchild=BinTreeBuilding();
cur->rchild=BinTreeBuilding();
return cur;
}else{
return NULL;
}
}
void InOrderOutput(PBinTreeNode ptr_node){
//先序遍历一棵二叉树
if(ptr_node->lchild){
InOrderOutput(ptr_node->lchild);
}
printf("%c",ptr_node->info);
if(ptr_node->rchild){
InOrderOutput(ptr_node->rchild);
}
}
int main(){
PBinTreeNode ptr_node=BinTreeBuilding();
InOrderOutput(ptr_node);
return 0;
}