首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

依据前序和中序遍历构造二叉树

2012-11-06 
根据前序和中序遍历构造二叉树#includestdio.htypedef struct btnode{char valuestruct btnode *lefts

根据前序和中序遍历构造二叉树

#include<stdio.h>typedef struct btnode{    char value;    struct btnode *left;    struct btnode *right;}btnode;int idxes_map[256];void map_idxes(char *inorder, int n){    int i;    for(i=0; i<n; i++)        idxes_map[inorder[i]] = i;}btnode *build_from_preorder_and_inorder(char *preorder, char *inorder, int n, int offset){    if(n==0)        return NULL;    char root_val = preorder[0];    int i = idxes_map[root_val]-offset;    btnode *root = malloc(sizeof(btnode));    root->value = root_val;                                                            root->left = build_from_preorder_and_inorder(preorder+1, inorder, i, offset);               root->right = build_from_preorder_and_inorder(preorder+i+1, inorder+i+1, n-i-1, offset+i+1);    return root;}void postorder(btnode *root){    if(root)    {        postorder(root->left);        postorder(root->right);        printf("%c", root->value);    }}int main(){    char *preorder = "ABDEGCFH";    char *inorder = "DBEGAHFC";    int n = strlen(preorder);    map_idxes(inorder, n);    btnode *root = build_from_preorder_and_inorder(preorder, inorder, n, 0);    postorder(root);    printf("\n");    return 0;}


1楼leihengxin昨天 22:20
顶一下。

热点排行