<html lang="en"><head><meta /><meta name="viewport" /><title>Optimized Code</title></head><body>
#include<stdio.h>
#include<stdlib.h>
#define BITREE_NODE_TYPE_ELEMENT char
typedef struct bi_tree_node
{
BITREE_NODE_TYPE_ELEMENT data;
struct bi_tree_node* LChild;
struct bi_tree_node* RChild;
}BiTree_Node, * BiTree;
void postOrder(BiTree root); //declare post-order traversal function
void inOrder(BiTree root); //declare in-order traversal function
void preOrder(BiTree root); //declare pre-order traversal function
void createBiTree(BiTree* bi_tree); //declare create binary tree function
void visit(BITREE_NODE_TYPE_ELEMENT data); //declare visit node data function
int main()
{
//test data: ABC**DE*G**F***
//pre-order: ABCDEGF
//in-order: CBEGDFA
//post-order: CGEFDBA
BiTree bi_tree = NULL;
puts("Please enter the node data of a binary tree in pre-order sequence, using '#' to represent null:");
createBiTree(&bi_tree);
printf("\nPre-order sequence:");
preOrder(bi_tree);
printf("\nIn-order sequence:");
inOrder(bi_tree);
printf("\nPost-order sequence:");
postOrder(bi_tree);
putchar('\n');
return 0;
}
//define visit node data function
void visit(BITREE_NODE_TYPE_ELEMENT data)
{
putchar(data);
}
//define create binary tree function
void createBiTree(BiTree* bi_tree)
{
char ch;
ch = getchar();
if (ch == '#')
*bi_tree = NULL;
else
{
*bi_tree = (BiTree)malloc(sizeof(BiTree_Node));
(*bi_tree)->data = ch;
createBiTree(&((*bi_tree)->LChild));
createBiTree(&((*bi_tree)->RChild));
}
}
//define pre-order traversal function
void preOrder(BiTree root)
//pre-order traversal of binary tree, root points to the root node of the binary tree or a subtree
{
if (root != NULL)
{
visit(root->data); //visit root node
preOrder(root->LChild); //pre-order traversal of left subtree
preOrder(root->RChild);//pre-order traversal of right subtree
}
}
//define in-order traversal function
void inOrder(BiTree root)
//in-order traversal of binary tree, root points to the root node of the binary tree or a subtree
{
if (root != NULL)
{
inOrder(root->LChild); //in-order traversal of left subtree
visit(root->data); //visit root node
inOrder(root->RChild); //in-order traversal of right subtree
}
}
//define post-order traversal function
void postOrder(BiTree root)
//post-order traversal of binary tree, root points to the root node of the binary tree or a subtree
{
if (root != NULL)
{
postOrder(root->LChild); //post-order traversal of left subtree
postOrder(root->RChild); //post-order traversal of right subtree
visit(root->data); //visit root node
}
}