题目要求的输入是先序输入,而输出形式是中缀表达式,即将线序输入的二叉树用中序顺序输出。
值得注意的是算术式的二叉树有三种输出形式:
如以下算术式二叉树:
先序遍历的前缀输出为:-+abc/de
中序遍历的中缀输出为:a+bc-d/e
后序遍历的后缀输出为:abc*+de/-
剩下要说的都在注释里,话不多说上代码
#include<stdio.h>
#include <stdlib.h>
typedef struct Node
{
char data;
struct Node* LChild;
struct Node* RChild;
}BiTNode,*BiTree;
//构建二叉树
int leaf = 0;//定义全局变量叶子节点的值
void CreateBiTree(BiTree* p)
{
char c;
c = getchar();
if (c == '#') *p = NULL;//若输入#即为空节点
else
{
*p = (BiTree)malloc(sizeof(BiTNode));
(*p)->data = c;
CreateBiTree(&((*p)->LChild));//按照先序遍历递归
CreateBiTree(&((*p)->RChild));
}
}
void InOrder(BiTree root)
{
if (root != NULL)
{
InOrder(root->LChild);
printf("%c", root->data);
InOrder(root->RChild);
}
}
int main()
{
BiTree p;
CreateBiTree(&p);
InOrder(p);
return 0;
}