【学习笔记】关于二叉树

这是以二叉链表为基础的学习记录

结点定义如下:

typedef struct node
{
    char date;
    struct node *lc,*rc;
} tree,*tr;


 

其中data只是表示数据域,应用是根据情况修改。*lc和*rc为左子树指针和右子树指针。

先序遍历函数,变量向上对应。

void xian(tr t)
{
    if(t!=NULL)
    {
        printf("%c",t->data);
        xian(t->lc);
        xian(t->rc);
    }
}


 

中序遍历函数,变量向上对应。

 

void zhong(tr t)
{
    if(t!=NULL)
    {
        zhong(t->lc);
        printf("%c",t->data);
        zhong(t->rc);
    }
}

后序遍历函数,变量向上对应。

 

void hou(tr t)
{
    if(t!=NULL)
    {
        hou (t->lc);
        hou(t->rc);
        printf("%c",t->data);
    }
}


按层次遍历函数,变量向上对应。

void ceng (tr t)
{
    int rear = 1,front = 0;
    tree *p[52];
    p[0] = t;
    while(rear>front)
    {
        if(p[front])
        {
            printf("%c",p[front]->date);
            p[rear] = p[front]->lc;
            rear++;
            p[rear] = p[front]->rc;
            rear++;
            front++;
        }
        else
            front++;
    }


}


注释:通过一个指针数组来实现队列思想,也相当于最后依次输出指针数组指向的节点的数据域内容。

叶子节点计数函数。

 上文中count没有定义;为一全局变量,起计数作用,主函数可输出。

void leaf(tr t)
{
    if(t!=NULL)
    {
        if(t->lc==NULL&&t->rc==NULL)
        {
            count++;
        }
        else
        {
            leaf(t->lc);
            leaf(t->rc);
        }
    }
}


二叉树深度计算函数,说是计算,实际上就是找返回值最大的。

int deep (tr t)
{
    if(t!=NULL)
    {
        int a = deep(t->lc),b = deep(t->rc);
        if(a>b)
        {
            return a+1;
        }
        else
        {
            return b+1;
        }
    }
    else
    {
        return 0;
    }
    return 0;
}


最终返回值就是深度。

posted @ 2013-02-19 20:14  、小呆  阅读(140)  评论(0编辑  收藏  举报