码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树(代码)

时间:2018-12-10 14:12:33      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:typedef   ret   code   col   tac   har   创建   tst   中序遍历   

1. 创建二叉树

因为在含有n个结点的二叉链表中一定有n+1个空指针域,所以在输入数据时一定要给出n+1个空指针值。

首先还是先要声明一下结构体

typedef char ElemType;
typedef struct Node
{
    ElemType data;
    struct Node *lchild,*rchild;
}BitTree;       

BitTree *creBitTree(void)
{
    BitTree *bt; ElemType x;
    scanf("%c",&x);
    if(x== )bt=NULL;
    else
    {
        bt = (BitTree*)malloc(sizeof(BitTree));
        bt->data = x;
        bt->lchild = creBitTree();
        bt->rchild = creBitTree();
    }
    return bt;
}

2,递归遍历算法

//先序遍历
void PreOrder(BitTree *bt)
{
    if(bt!=NULL)
    {
        printf("%c",bt->data);
        PreOrder(bt->lchild);
        PreOrder(bt->rchild);
    }
}
//中序遍历
void InOrder(BitTree *bt)
{
    if(bt!=NULL)
    {
        InOrder(bt->lchild);
        printf("%c",bt->data);
        InOrder(bt->rchild);
    }
}
//后序遍历
void PostOrder(BitTree *bt)
{
    if(bt!=NULL)
    {
        PostOrder(bt->lchild);
        PostOrder(bt->rchild);
        printf("%c",bt->data);
    }
}

3,非递归遍历算法

//先序遍历
void PreOrder(BitTree *T)
{
    stack S;       //自己实现的栈,以及一些函数
    BitTree *p;
    InitStack(&S);
    push(&S,T);
    while(!EmptyStack(&S))
    {
        p = pop(&S);
        while(p)
        {
            printf("%c ",p->data);
            if(p->rchild) push(&S,p->rchild);
            p = p->lchild;
        }
    }
}

//中序遍历
void InOrder(BitTree *T)
{
    stack S;
    BitTree *p;
    InitStack(&S);
    p = T;
    while(p || !EmptyStack(&S))
    {
        while(p)
        {
            push(&S,p);
            p = p->lchild;
        }
        p = pop(&S);
        printf("%c",p->data);
        p = p->rchild;
    }
}

//后序遍历
void PostOrder(BitTree *T)
{
    stack S;
    BitTree *p,*q;
    InitStack(&S);
    p = T; q = NULL;
    while(p||!EmptyStack(&S))
    {
        if(p!=q)
        {
            while(p)
            {
                push(&S,p);
                if(p->lchild) p=p->lchild;
                else p = p->rchild;
            }
        }
        if(EmptyStack(&S))break;
        q = gettop(&S);
        if(q->rchild==p)
        {
            p=pop(&S);
            printf("%c ",p->data);
        }
        else
        p = q->rchild;
    }

}

 

 

     

二叉树(代码)

标签:typedef   ret   code   col   tac   har   创建   tst   中序遍历   

原文地址:https://www.cnblogs.com/wzqstudy/p/10095433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!