大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > 算法技巧 > 二叉树基本操作的程序实现

二叉树基本操作的程序实现(2)

关键词:二叉树C语言  阅读(2341) 赞(31)

[摘要]本文是二叉树基本操作的程序实现,与大家分享。

#include"Bintree.h"
/*******************************************/
/*      递归法将二叉树的左右子树互换       */
/*******************************************/
void Exchange1(Bintree t)
{
    Bintree temp;
    if(t)
    {
        Exchange1(t->lchild);
        Exchange1(t->rchild);
        temp=t->lchild;
        t->lchild=t->rchild;
        t->rchild=temp;
    }
}
/*******************************************/
/*      非递归法将二叉树的左右子树互换     */
/*******************************************/
void Exchange2(Bintree t)
{
    Bintree temp;
    stack s;
    s.top=0;
    while(t||s.top)
    {
        if(t)
        {
            s.data[s.top++]=t;
            temp=t->lchild;
            t->lchild=t->rchild;
            t->rchild=temp;
            t=t->lchild;
        }
        else
        {
            t=s.data[--s.top]->rchild;
        }
 
    }
}
int main()
{
    Bintree t;
    Creat_Bintree(&t);
    Exchange2(t);
    Inorder2(t);
    return 0;
}
 
 
 
#include"Bintree.h"
/*******************************************/
/*        递归法求叶子结点个数             */
/*******************************************/
int Leaves_Num1(Bintree t)
{
    if(t)
    {
        if(t->lchild==NULL&&t->rchild==NULL)
        {
            return 1;
        }
        return Leaves_Num1(t->lchild)+Leaves_Num1(t->rchild);
    }
    return 0;
}
 
/*******************************************/
/*        非递归法求叶子结点个数             */
/*******************************************/
int Leaves_Num2(Bintree t)
{
    int count=0;
    stack s;
    s.top=0;
    while(t||s.top>0)
    {
        if(t)
        {
             s.data[s.top++]=t;
             if(t->lchild==NULL&&t->rchild==NULL)
             {
 
                count++;
             }
             t=t->lchild;
        }
        else
        {
            t=s.data[--s.top]->rchild;
        }
    }
    return count;
}
 
        
int main()
{
    int count=0;
    Bintree t;
    Creat_Bintree(&t);
    count=Leaves_Num2(t);
    printf("该二叉树的叶子结点数为:%d\n",count);
    return 0;
}


相关评论