• 叶子数和深度


    #include
    #include

    typedef struct BinaryTree{
        struct BinaryTree* left;//左指针指向左孩子 
        struct BinaryTree* right;//右指针指向右孩子 
        int data;//二叉树节点的数据域 
    }BT;//给二叉树类型名重定义为BT 

    //创建一个二叉树
    BT* CreatTree(){
        //动态开辟所需要的节点
        BT* n1=(BT*)malloc(sizeof(BT));
        BT* n2=(BT*)malloc(sizeof(BT));
        BT* n3=(BT*)malloc(sizeof(BT));
        BT* n4=(BT*)malloc(sizeof(BT));
        BT* n5=(BT*)malloc(sizeof(BT));
        BT* n6=(BT*)malloc(sizeof(BT));
        BT* n7=(BT*)malloc(sizeof(BT)); 
        
        //给各个节点赋值
        n1->data = 1;
        n2->data = 2;
        n3->data = 3;
        n4->data = 4;
        n5->data = 5;
        n6->data = 6;
        n7->data = 7;
        //让每个节点的左右指针指明方向,创建一个二叉树
        n1->left=n2;
        n1->right=n3;
        n2->left=n4;
        n2->right=n5;
        n3->left=n6;
        n3->right=NULL;
        n4->left=n7; 
        n4->right=NULL;
        n5->left=NULL;
        n5->right=NULL;
        n6->left=NULL;
        n6->right=NULL;
        n7->left=NULL;
        n7->right=NULL;
        //形成二叉树后,返回让指针返回根节点
        return n1;
    }

    //先序遍历,先遍历根,再遍历左子树,最后遍历右子树 
    void PreOrderTraverse(BT* root){
        if(!root)
        {return ;
        }
        else{
            printf("%d",root->data);
            PreOrderTraverse(root->left);
            PreOrderTraverse(root->right);
        }
    }

    //中序遍历,先遍历左子树,再遍历根,最后遍历右子树 
    void InOrderTraverse(BT* root){
        if(!root)
        {return ;
        }
        else{
            InOrderTraverse(root->left);
            printf("%d",root->data);
            InOrderTraverse(root->right);
        }    

    //后序遍历,先遍历左子树,再遍历右子树,最后遍历根 
    void PostOrderTraverse(BT* root){
        if(!root)
        {return ;
        }
        else{
            PreOrderTraverse(root->left);
            PreOrderTraverse(root->right);
            printf("%d",root->data);
        }

    //求二叉树中叶子结点数
    void TreeSize(BT* root)//求二叉树结点个数
    {
        int size = 0;
        if (root == NULL)
        {
            return;
        }
        else
        {
            ++size;
            printf("%d",size);
        }
        TreeSize(root->left);
        TreeSize(root->right);
    }

    /*//叶子结点数
    int LeavesCount(BT* T)
    {
        int count = 0;
        if (T!= NULL)
        {
            if ((T->left == NULL) && (T->right== NULL)) count++;
            count+=LeavesCount(T->left);
            count+=LeavesCount(T->right);
        }
        printf("%d",count);
        return count;
    }*/
    int main(){
        BT* root=CreatTree();
        printf("前序遍历:");
        PreOrderTraverse( root);
        printf("\n");
        printf("中序遍历:");
        InOrderTraverse( root);
        printf("\n");
        printf("后序遍历:");
        PostOrderTraverse( root);
        printf("\n");
        printf("二叉树的叶子结点数为:"); 
        TreeSize(root);
        printf("二叉树的深度为:");
         
        return 0;
    }
     
     

  • 相关阅读:
    Javaweb书城项目的路径问题
    javacv 基础04-读取mp4,avi等视频文件并截图保存图片到本地
    JavaScript入门 Vuex/elementPlus UI组件库 Day08
    开源项目 PM 浅谈如何设计官网
    python系列:远程SSH登录并执行命令,获取结果
    huggingface Tokenizers 官网文档学习:分词算法分类与五个子词级分词算法
    破解tomcat密码并上传webshell
    软件工程毕业设计课题(65)微信小程序毕业设计PHP食堂餐厅预约订座小程序系统设计与实现
    Python的函数简介
    京东数据分析(京东数据采集):2023年10月京东平板电视行业品牌销售排行榜
  • 原文地址:https://blog.csdn.net/2201_75467393/article/details/134459666