• 数据结构代码集锦3


    #include<stdio.h>
    #include<math.h>
    
    int Bdepth(BiTree b)
    { //求二叉树的高度
        int ldepth,rdepth;
        if(b==NULL)
            return 0;
        ldepth = Bdepth(b->lchild);
        rdepth = Bdepth(b->rchild);
        return (ldepth>rdepth)?(ldepth+1):(rdepth+1);
    }
    int Bignodes(BiTree b,Elemtype x)
    {//求二叉树b中所有大于x结点的值的个数
        int num1,num2,num=0;
        if(b==NULL)
            return 0;
        num1 = Bignodes(b->lchild,x);
        num2 = Bignodes(p->rchild,x);
        num += num1+num2;
        if(b->data>x) //if(b->data<x)变成求小于x结点值的个数
            num++;
        return num;
    }
    
    /*统计二叉树中第k层结点的个数
    思想:采用先序遍历的递归算法,num初值为0,若当前访问结点b是第k层上的叶子节点
    则num++,再求出左右子树第k层上的叶子节点个数num1,num2,最后返回num1+num2*/
    int Lnodes(BiTree b,int h,int k,int n) 
    { 
     //h是b所在的层数,初值为1,n是第k层结点的个数,初值为0
        if(b==NULL)
            return 0;
        else
        {
            if(h==k)  n++;
            else if
            {
                Lnodes(b->lchild,h+1,k,n);
                Lnodes(b->rchild,h+1,k,n);
            }
        }
    }
    int LevelLnodes(BiTree b,int k)
    {
        return Lnodes(b,1,k,0);
    }
    
    int Leafnums(BiTree b,int h,int k)
    { //求二叉树第k层上叶子结点的个数
        int num1,num2,num=0;
        if(b==NULL)
            return 0;
        else 
        {
            if(h==k&&b->lchild==NULL&&b-rchild==NULL)
                num++;
            num1 = Leafnums(b->lchild,h+1,k,n);
            num2 = Leafnums(b->lchild,h+1,k,n);
            num += num1+num2;
            return num;
        }
    }
    int LevelLeafk(BiTree b,int k) //求b中第k层上的叶子结点的个数
    {
        return Leafnums(b,1,k);
    }
    void FindMinNode(BiTree b,char min)
    { //求二叉树最小值的结点值
        if(b->data<x)
            min = b->data;
        FindMinNode(b->lchild,min); //在左子树中找最小值结点值
        FindMinNode(b->rchild,min);  //在右子树中找最小值结点值
    }
    void MinNode(BiTree b) //输出最小结点值
    {
        if(b!=NULL)
        {
            char min = b->data;
            FindMinNode(b,min);
            printf("Min = %c",min);
        }
    }
    
    void FindMaxNode(BiTree b,char Max)
    { //求二叉树中最大值的结点
        if(b->data>Max)
            Max = b->data;
        FindMaxNode(b->lchild,Max);
        FindMaxNode(b->rchild,Max);
    }
    void MaxNode(BiTree b)
    {
        char max = b->data;
        FindMaxNode(b,max);
        printf("Max = %c
    ",max);
    }
    View Code
  • 相关阅读:
    CF869E The Untended Antiquity 解题报告
    Walk 解题报告
    CF911F Tree Destruction 解题报告
    P4397 [JLOI2014]聪明的燕姿
    洛谷 P2329 [SCOI2005]栅栏 解题报告
    洛谷 P3747 [六省联考2017]相逢是问候 解题报告
    set-erase
    set-empty
    set-empty
    set-end
  • 原文地址:https://www.cnblogs.com/spore/p/12004001.html
Copyright © 2020-2023  润新知