一棵二叉树的前序遍历结果是ABCEDF,中序遍历结果是CBAEDF,则其后序遍历的结果是 ?

2025-04-04 17:38:48
推荐回答(1个)
回答1:

// 二叉树的"前序遍历"结果: A B C E D F
// 二叉树的"中序遍历"结果: C B A E D F
// 二叉树的"后序遍历"结果: C B F D E A
// 2017-04-30
#include "stdio.h"
#include "stdlib.h"
struct tree
{
    char data;
    struct tree *left;
    struct tree *right;
};
typedef struct tree treenode;
typedef treenode *btree;

btree createbtree(char *data,int pos,int maxPos) //递归创建法
{
    btree newnode;

    if(data[pos]==0 || pos>maxPos)
    {
        return NULL;
    }
    else
    {
        newnode=(btree)malloc(sizeof(treenode));
        newnode->data=data[pos];
        newnode->left=createbtree(data,2*pos,maxPos);
        newnode->right=createbtree(data,2*pos+1,maxPos);
        return newnode;
    }
}

void inorder(btree ptr)
{
    if(ptr!=NULL)
    {
        inorder(ptr->left);
        printf("%C ",ptr->data);
        inorder(ptr->right);
    }
}

void preorder(btree ptr)
{
    if(ptr!=NULL)
    {
        printf("%C ",ptr->data);
        preorder(ptr->left);
        preorder(ptr->right);
    }
}

void postorder(btree ptr)
{
    if(ptr!=NULL)
    {
        postorder(ptr->left);
        postorder(ptr->right);
        printf("%C ",ptr->data);
    }
}

int main()
{
    btree root=NULL;
    int i;

    char data[16]={0,'A','B','E','C',0,0,'D',0,0,0,0,0,0,0,'F'};
    root=createbtree(data,1,15);
    printf("数组的顺序存储内容:\n");
    for(i=1;i<16;i++)
    {
        if(data[i]==0)
        {
            printf("^ ");
        }
        else
        {
            printf("%C ",data[i]);
        }
    }

    printf("\n二叉树的节点内容(前序遍历): ");
    preorder(root);
    printf("\n二叉树的节点内容(中序遍历): ");
    inorder(root);
    printf("\n二叉树的节点内容(后序遍历): ");
    postorder(root);

    printf("\n");
    return 0;
}