首页 > 其他 > 详细

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

时间:2019-11-21 23:56:29      阅读:173      评论:0      收藏:0      [点我收藏+]
#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博文,开通博客审核通过,学生一枚,初来乍到。明天再改。。。

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

原文:https://www.cnblogs.com/Andre/p/11909098.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!