简单的二叉树的创建(前序输入)&前序遍历&中序遍历&后序遍历

#include <stdio.h>
#include <stdlib.h>

#define MAX 1024

typedef struct bitnode
{
    int data;
    struct bitnode *lchild;
    struct bitnode *rchild;
}BinTree;

BinTree *Creat_Bintree()
{
    BinTree *p;
    int x;
    scanf("%d",&x);
    if(x==0)
    {
        p = NULL;
    }
    else
    {
        p = (BinTree *)malloc(sizeof(BinTree));
        p->data=x;
        p->lchild=Creat_Bintree();
        p->rchild=Creat_Bintree();
    }
    return p;
}

void PreOrderTraversal(BinTree *r)
{
    if(r)
    {
        printf("%d ",r->data);
        PreOrderTraversal(r->lchild);
        PreOrderTraversal(r->rchild);
    }
}

void InOrderTraversal(BinTree *r)
{
    if(r)
    {
        InOrderTraversal(r->lchild);
        printf("%d ",r->data);
        InOrderTraversal(r->rchild);
    }
}

void LastOrderTraversal(BinTree *r)
{
    if(r)
    {
        LastOrderTraversal(r->lchild);
        LastOrderTraversal(r->rchild);
        printf("%d ",r->data);
    }
}

void NRPreOrder(BinTree *r)
{
    BinTree *stack[MAX];
    BinTree *p;
    int top =-1;
    if(r==NULL) return;
    p=r;
    while(p!=NULL||top!=-1)
    {
        while(p!=NULL)
        {
            printf("%d ",p->data);
            top++;
            stack[top]=p;
            p=p->lchild;
        }
        if(top<0) return;
        else
        {
            p=stack[top];
            top--;
            p=p->rchild;
        }
    }
}

int main()
{
    BinTree *root;
    root=Creat_Bintree();
    printf("前序遍历:");
    PreOrderTraversal(root);
    printf("\n中序遍历");
    InOrderTraversal(root);
    printf("\n后序遍历");
    LastOrderTraversal(root);
    printf("\n非递归前序遍历:");
    NRPreOrder(root);
    return 0;
}

第一篇cnblog博文,开通博客审核通过,学生一枚,初来乍到。明天再改。。。

猜你喜欢

转载自www.cnblogs.com/Andre/p/11909098.html