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

Posted andre

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的二叉树的创建(前序输入)&前序遍历&中序遍历&后序遍历相关的知识,希望对你有一定的参考价值。

#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("
中序遍历");
    InOrderTraversal(root);
    printf("
后序遍历");
    LastOrderTraversal(root);
    printf("
非递归前序遍历:");
    NRPreOrder(root);
    return 0;
}

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

以上是关于简单的二叉树的创建(前序输入)&前序遍历&中序遍历&后序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的构建

二叉树的前序中序后序层次遍历的原理及C++代码实现

已知二叉树前序和中序,求二叉树。

二叉树的前序中序后序遍历相互求法

java实现线索化二叉树的前序中序后续的遍历(完整代码)

二叉树-前序&中序