• 叶子数和深度


    #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;
    }
     
     

  • 相关阅读:
    java计算机毕业设计食品销售网站源码+数据库+系统+lw文档+mybatis+运行部署
    Find My技术|智能防丢还得看苹果Find My技术
    【精讲】vue框架 vue脚手架多种方法安装(教程)及注意事项、系统安装时操作代码
    跟李沐学AI-动手学深度学习1
    云安全—Dashboard 攻击面
    Go基础语法:函数+
    【Java - L - 0102】- m - 二叉树的层序遍历
    01-js书写方式、变量
    如何爬取 python 进行多线程跑数据的内容
    java计算机毕业设计网上汽车售票系统源码+数据库+lw文档+系统+部署
  • 原文地址:https://blog.csdn.net/2201_75467393/article/details/134459666