二叉树——创建,递归遍历输出

来源:互联网 发布:陈霸先 知乎 编辑:程序博客网 时间:2024/06/16 04:22

二叉树原形:

这里写图片描述

因为要知道叶子结点(来结束子树),所以需要确定叶子结点的孩子,把叶子结点的孩子记为#

补充成完全二叉树(完全二叉树):

这里写图片描述

输入的时候,因为程序中是先序方法创建二叉树(当然也可以中序和后序),所以输入要按先序方法输入:ab#c##d#e##


二叉树先序,中序,后序遍历输出程序如下

#include <stdio.h>#include <malloc.h>typedef char TElemType;typedef struct BiTNode{    TElemType data;    struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//创建二叉树BiTree CreatBiTree(BiTree T){    char x;    scanf("%c",&x);    if(x=='#')    {        T=NULL;    }    else    {        T=(BiTree)malloc(sizeof(BiTNode));//根结点        if(!T)        {            printf("error");        }        T->data=x;        T->lchild=CreatBiTree(T->lchild);        T->rchild=CreatBiTree(T->rchild);    }    return T;}//先序void PreOrder(BiTree T){    //根左右    if(T)    {        printf("%c ",T->data);        PreOrder(T->lchild);        PreOrder(T->rchild);    }}//中序void InOrder(BiTree T){    //左根右    if(T)    {        PreOrder(T->lchild);        printf("%c ",T->data);        PreOrder(T->rchild);    }}//后序void LastOrder(BiTree T){    //左右根    if(T)    {        PreOrder(T->lchild);        PreOrder(T->rchild);        printf("%c ",T->data);    }}int main(){    BiTree T=NULL;    int ch;    T=CreatBiTree(T);    while(1)    {        printf("1_PreOrder\n");        printf("2_InOrder\n");        printf("3_LastOrder\n");        printf("4_exit\n");        scanf("%d",&ch);        switch(ch)        {            case 1:printf("PreOrder is:");PreOrder(T);break;            case 2:printf("InOrder is:");InOrder(T);break;            case 3:printf("LastOrder is:");LastOrder(T);break;            case 4:return;            default:printf("input error!");        }        printf("\n");    }    return 0;}