用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

构造二叉树 (中序 前序)

2013-03-10 作者: 海大软件1102班举报

[c++]代码库

#include<stdio.h>
#include<malloc.h>
#include<string.h>
void exit(int);
#define MAX 100
typedef struct node {
    char d;
    struct node *lchild, *rchild;
} Tnode;

void MK(char in[], char is, char ie, char pre[], char pres, char pree, Tnode **r) {
    int i;
    if(is > ie || pres > pree)
        *r = NULL;
    else {
        *r = malloc(sizeof(Tnode));
        (*r)->d = pre[pres];
        for(i = is; i <= ie; i++) {
            if(in[i] == pre[pres]) {
                MK(in, is, i - 1, pre, pres + 1, pres + i - is, &(*r)->lchild);
                MK(in, i + 1, ie, pre, pres + i - is + 1, pree, &(*r)->rchild);
                break;
            }
            if(i > ie) {
                printf("输入错误!\n");
                exit(1);
            }
        }
    }
}
void postorder(Tnode *r) {
    if(r) {
        postorder(r->lchild);
        postorder(r->rchild);
        printf("%c", r->d);
    }
}
int leaf(Tnode *r) {
    if(r == NULL)
        return 0;
    else if(r->lchild == NULL && r->rchild == NULL)
        return 1;
    else
        return leaf(r->lchild) + leaf(r->rchild);
}
int height(Tnode *r) {
    int h1, h2;
    if(r == NULL)
        return 0;
    else {
        h1 = height(r->lchild);
        h2 = height(r->rchild);
        return 1 + (h1 > h2 ? h1 : h2);
    }
}
void main() {
    Tnode *r = NULL;
    char in[MAX], pre[MAX];
    printf("请输入前序序列:\n");
    gets(pre);
    printf("请输入中序序列:\n");
    gets(in);
    MK(in, 0, strlen(in) - 1, pre, 0, strlen(pre) - 1, &r);
    printf("\n后序遍历序列为:\n");
    postorder(r);
    printf("\n叶结点的个数为:%d\n", leaf(r));
    printf("\n高度为:%d\n", height(r));
}





网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...