Description
编写程序,输出以二叉树表示的算术表达式,若该表达式中含有括号,则在输出时应添上。
Input
按先序输入一行字符,其中#表示取消建立子树结点,即所有叶子节点均为#。
Output
输出该二叉树所表示的算术表达式(若表达式中含有括号,则在输出时应添上)。
-
Sample Input
*+a(###b#)##c##
-
Sample Output
(a+b)*c
#include<stdio.h>
#include<malloc.h>
typedef struct binarytree
{
char val;
struct binarytree *left;
struct binarytree *right;
}bt;
void creatbt(bt **pbt)
{
char ch;
scanf("%c",&ch);
if(ch == '#')
{
*pbt = NULL;
}
else
{
*pbt = (bt*)malloc(sizeof(bt));
(*pbt)->val = ch;
creatbt(&(*pbt)->left);
creatbt(&(*pbt)->right);
}
}
int depth(bt *pbt)
{
int deep = 0;
if(pbt == NULL)
{
return 0;
}
/* else
{
return 1 + (depth(pbt->left) - depth(pbt->right)) ? depth(pbt->left) : depth(pbt->right) ;
}*/
else
{
int ld = depth(pbt->left);
int rd = depth(pbt->right);
deep = ld + 1 > rd + 1 ? ld + 1 : rd + 1;
}
return deep;
}
void inorderbt(bt *t)
{
if(t == NULL)
{
return;
}
else
{
inorderbt(t->left);
printf("%c",t->val);
inorderbt(t->right);
}
}
int main()
{
bt *pbt; // = (bt* )malloc(sizeof(pbt));
creatbt(&pbt);
int num = depth(pbt);
inorderbt(pbt);
//printf("%d\n",num);
printf("\n");
return 0;
}