题目
description:
编写程序,输出以二叉树表示的算术表达式,若该表达式中含有括号,则在输出时应添上。
input:
按先序输入一行字符,其中#表示取消建立子树结点,即所有叶子节点均为#。
output:
输出该二叉树所表示的算术表达式(若表达式中含有括号,则在输出时应添上)。
sample_input:
*+a(###b#)##c##
sample_output:
(a+b)*c
思路
和上一篇差不多,后面写个中序遍历输出即可。
代码
#include<stdio.h>
#include<stdlib.h>
typedef struct BTNode{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
};
BTNode *createBTNode(BTNode *B);
void preorder(BTNode *p);
int main(){
BTNode *B;
B = createBTNode(B); //构建二叉树
preorder(B); //输出
return 0;
}
BTNode *createBTNode(BTNode *B){
char t;
scanf("%c",&t);
if(t!='#') {
B = (BTNode*)malloc(sizeof(BTNode));
B->data = t;
B->lchild = createBTNode(B->lchild);
B->rchild = createBTNode(B->rchild);
return B;
}else return NULL;
}
void preorder(BTNode *p){ //中序遍历
if(p->lchild) preorder(p->lchild);
if(p) printf("%c",p->data); //visit(p)
if(p->rchild) preorder(p->rchild);
}