已知遍历结果如下,写出对应的二叉树
前序: A B C E H F I J D G K
中序: A H E C I F J B D K G?
创建的时候以先序的方式创建,当某个结点没有左子树或者右子树的时候用#号进行补齐
先序遍历:先访问树根,再访问左子树,最后访问右子树
中序遍历:先访问左子树,再访问树根,最后访问右子树
后序遍历:先访问左子树,再访问右子树,最后访问树根
一、实现
1.创建树
代码如下(示例):
typedef char data_t;
typedef struct node_t{
data_t data;
struct node_t *left;
struct node_t *right;
}bitree;
bitree *tree_create();
void preorder(bitree *root);
void inorder(bitree *root);
void postorder(bitree *root);
2.实现树的先序、中序、后序
代码如下(示例):
bitree * tree_create(){
data_t ch;
bitree *root;
scanf("%c",&ch);
if(ch == '#'){
return NULL;
}
if((root = (bitree *)malloc(sizeof(bitree)))==NULL){
printf("malloc failed\n");
return NULL;
}
root->data = ch;
root->left = tree_create();
root->right = tree_create();
return root;
}
void preorder(bitree * root){
if(root == NULL){
return;
}
printf("%c",root->data);
preorder(root->left);
preorder(root->right);
}
void inorder(bitree * root){
if(root == NULL){
return;
}
inorder(root->left);
printf("%c",root->data);
inorder(root->right);
}
void postorder(bitree * root){
if(root == NULL){
return ;
}
postorder(root->left);
postorder(root->right);
printf("%c",root->data);
}
3.测试树
代码如下(示例):
int main(int argc,const char *argv[]){
bitree *root;
if((root = tree_create())== NULL){
return -1;
}
preorder(root);
puts("");
inorder(root);
puts("");
postorder(root);
puts("");
return 0;
}