创建一棵二叉树

来源:互联网 发布:淘宝情趣内衣买家秀图 编辑:程序博客网 时间:2024/05/18 13:10

创建一棵二叉树并求其三种遍历序列

给定一颗二叉树的遍历序列我们创建相应的二叉链表. 我们在对二叉树进行遍历时都忽略了空子树, 所以我们在创建的时候用’#’来代替空子树, 空子树值为NULL, 详见下图:
这里写图片描述

如图所示, 我们知道他的先序序列为: abd#g###ce##fh###
于是我们用C语言完成上述数据结构:

#include <stdio.h>#include <stdlib.h>//#define ElemeType chartypedef struct BTNode{    char data;    struct BTNode *lchild;    struct BTNode *rchild;}BTNode;//先序创建二叉树BTNode *create(BTNode *T){    char ch;    T = (BTNode*)malloc(sizeof(BTNode));    //T的地址分配失败    if(!T)        exit(0);    scanf("%c", &ch);    if(ch=='#')        T = NULL;    else{            T->data = ch;            T->lchild = create(T->lchild);            T->rchild = create(T->rchild);    }    return T;}//先序遍历void preorder(BTNode *T){    if(T!=NULL){        printf("%c", T->data);        preorder(T->lchild);        preorder(T->rchild);    }}//中序遍历void inorder(BTNode *T){    if(T!=NULL){        inorder(T->lchild);        printf("%c", T->data);        inorder(T->rchild);    }}//后序遍历void postorder(BTNode *T){    if(T!=NULL){        postorder(T->lchild);        postorder(T->rchild);        printf("%c", T->data);    }}//总体输出void displayOrder(BTNode *T){    printf("先序遍历节点输出如下: \n");    preorder(T);    printf("\n");    printf("中序遍历节点输出如下: \n");    inorder(T);    printf("\n");    printf("后序遍历节点输出如下: \n");    postorder(T);    printf("\n");}int main(){    BTNode *T;    printf("输入二叉树所有节点: ");    T = create(T);    displayOrder(T);    return 0;}

运行结果如下:
这里写图片描述

原创粉丝点击