二叉树的遍历(递归算法)

 

//二叉树的遍历(递归算法)

#include <stdio.h>
#include <malloc.h>

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;//存储二叉树的左孩子和右孩子
}BiTNode,*BiTree;

void createTree(BiTree &T)
{
    T=(BiTree)malloc(sizeof(BiTNode));
    T->data=1;

    T->lchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->lchild->data=2;

    T->lchild->lchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->lchild->lchild->data=4;
    T->lchild->lchild->lchild=NULL;
    T->lchild->lchild->rchild=NULL;
    
    T->lchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->lchild->rchild->data=5;

    T->lchild->rchild->lchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->lchild->rchild->lchild->data=7;
    T->lchild->rchild->lchild->lchild=NULL;
    T->lchild->rchild->lchild->rchild=NULL;

    T->lchild->rchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->lchild->rchild->rchild->data=8;
    T->lchild->rchild->rchild->lchild=NULL;
    T->lchild->rchild->rchild->rchild=NULL;

    T->rchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->rchild->data=3;
    T->rchild->lchild=NULL;

    T->rchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
    T->rchild->rchild->data=6;
    T->rchild->rchild->lchild=NULL;
    T->rchild->rchild->rchild=NULL;
}

void InitTree(BiTree &root)
{
    root = (BiTNode *)malloc(sizeof(BiTNode));
    root->data = -1;
    root->lchild = NULL;
    root->rchild = NULL;
}

void visit(BiTNode* &T)//访问函数
{
    printf("%d ",T->data);
}

void PreOrder(BiTree T)//先序遍历(根左右)
{
    if(T!=NULL)
    {
        visit(T);//进行递归来访问节点
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

void InOrder(BiTree T)//中序遍历(左根右)
{
    if(T!=NULL)
    {
        InOrder(T->lchild);
        visit(T);
        InOrder(T->rchild);
    }
}

void PostOrder(BiTree T)//后序遍历(左右根)
{
    if(T!=NULL)
    {
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        visit(T);
    }
}

int main()
{
    BiTree Tree;
    createTree(Tree);
    printf("PreOrder : ");
    PreOrder(Tree);
    printf("\n");
    printf("InOrder : ");
    InOrder(Tree);
    printf("\n");
    printf("PostOrder : ");
    PostOrder(Tree);
    printf("\n");
    return 0;
}

 

posted @ 2023-04-24 09:13  正方形的被子  阅读(40)  评论(0)    收藏  举报