精华内容
下载资源
问答
  • #includeusing namespace std;...//结点的值TNode* left;//左子树TNode* right;//右子树}*BiTree;void CreateBiTree(BiTree &T)//中序遍历方式创建二叉树 ,输入#代表该结点为空{char nodeValue;cin>...

    #include

    using namespace std;

    typedef struct TNode//二叉树结构

    {

    char nodeValue;//结点的值

    TNode* left;//左子树

    TNode* right;//右子树

    }*BiTree;

    void CreateBiTree(BiTree &T)//中序遍历方式创建二叉树 ,输入#代表该结点为空

    {

    char nodeValue;

    cin>> nodeValue;

    if(nodeValue!='#')//结点非空

    {

    T=new TNode;

    T->nodeValue=nodeValue;

    CreateBiTree(T->left);

    CreateBiTree(T->right);

    }

    else T=NULL;

    }

    int CountLeaf(BiTree T)

    {

    static int LeafNum=0;//叶子初始数目为0,使用静态变量

    if(T)//树非空

    {

    if(T->left==NULL&&T->right==NULL)//为叶子结点

    LeafNum ;//叶子数目加1

    else//不为叶子结点

    {

    CountLeaf(T->left);//递归统计左子树叶子数目

    CountLeaf(T->right);//递归统计右子树叶子数目

    }

    }

    return LeafNum;

    }

    //用来测试的main函数,

    int main()

    {

    BiTree T;

    int leafNum;

    cout< CreateBiTree(T);

    leafNum=CountLeaf(T);

    cout< return 0;

    }。

    全部

    展开全文
  • 统计二叉树叶子结点个数

    千次阅读 2020-04-16 11:08:08
    统计二叉树叶子结点个数 运行结果截图: 源代码: #include<stdio.h> #include<stdlib.h> typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void ...

    统计二叉树叶子结点的个数

    运行结果截图:
    在这里插入图片描述
    源代码:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct BiTNode
    {
    	char data;
    	struct BiTNode *lchild,*rchild;
    }BiTNode,*BiTree;
    void CreatTree(BiTree &A)
    {
    	char ch;
    	scanf("%c",&ch);
    	if(ch=='#')
    	{
    		A=NULL;
    	}
    	else
    	{
    		A=new BiTNode;
    		A->data=ch;
    		CreatTree(A->lchild);
    		CreatTree(A->rchild);
    	}
    }
    int NodeTree(BiTree A)
    {
    	if(A==NULL)
    		return 0;
    	else if(A->lchild==NULL&&A->rchild==NULL)
    		return 1;
    	else
    		return NodeTree(A->lchild)+NodeTree(A->rchild);
    }
    int main()
    {
    	BiTree  A;
    	int b;
    	printf("先序法赋值(空用#表示):");
    	CreatTree(A);
    	b=NodeTree(A);
    	printf("共有%d个叶子节点\n",b);
    }
    
    
    展开全文
  • 统计二叉树中叶子结点个数和度为1、度为2的结点个数,因此可以参照二叉树三种遍历算法(先序、中序、后序)中的任何一种去完成,只需将访问操作具体变为判断是否为叶子结点和度为1、度为2的结点统计操作即可。...

    算法思想

    统计二叉树中叶子结点的个数和度为1、度为2的结点个数,因此可以参照二叉树三种遍历算法(先序、中序、后序)中的任何一种去完成,只需将访问操作具体变为判断是否为叶子结点和度为1、度为2的结点及统计操作即可。

    Code

    #include <stdio.h>
    #include <stdlib.h>
    
    int LeafCount=0;
    int Degree1Count=0;
    int Degree2Count=0;
    
    typedef char DataType;             //二叉链表结点的数据类型 
    
    typedef struct Node               //定义二叉树的二叉链表结点结构 
    {
        DataType data;
        struct Node *LChild;         //左子树 
        struct Node *RChild;         //右子树     
    }BiTNode,*BiTree;
    
    void CreateBiTree(BiTree *bt);   //创建二叉链表函数 
    void PreOrder(BiTree root);      //先序遍历二叉树
    void InOrder(BiTree root);       //中序遍历二叉树
    void PostOrder(BiTree root);     //后序遍历二叉树
    void Leaf(BiTree root);          //统计叶子结点数目 
    void Degree1(BiTree root);        //统计度为1的结点数目
    void Degree2(BiTree root);        //统计度为2的结点数目
    
    int main()
    {
        BiTree bt;
        int choice;
        while(true)
        {                   //二叉树操作选择菜单 
        printf("*****************Please enter your choice*****************\n\n");
        printf("                choice 1:创建二叉树\n");
            printf("                choice 2:先序遍历二叉树\n");
            printf("                choice 3:中序遍历二叉树\n");
            printf("                choice 4:后序遍历二叉树\n");
            printf("                choice 5:打印叶子结点数目\n");
            printf("                choice 6:打印度为1的结点数目\n");
            printf("                choice 7:打印度为2的结点数目\n");
            printf("                choice 0:退出\n\n");
            scanf("%d",&choice);
            switch(choice)
            {
                case 1: CreateBiTree(&bt);
                        break;
                case 2: PreOrder(bt);             
                          printf("\n");
                           break;
    
                case 3: InOrder(bt);               
                        printf("\n");
                           break;
                case 4: PostOrder(bt);                
                        printf("\n");
                           break;
                case 5: Leaf(bt);             
                          printf("该二叉树叶子结点的数目为:%d\n",LeafCount);
                           break;
                case 6: Degree1(bt);               
                        printf("该二叉树度为1的结点数目为:%d\n",Degree1Count);
                           break;
                case 7: Degree2(bt);                
                        printf("该二叉树度为2的结点数目为:%d\n",Degree2Count);
                           break;
                case 0: exit(0);                
                        break;
                default:
                    printf("ERROR!!\n");
                    exit(0);
                    break;
            }        
        }
        return 0; 
    } 
    
    void CreateBiTree(BiTree *bt)
    {
        char ch;
        printf("Please enter data:");
        getchar();
        ch = getchar();
        if(ch == '.')              //读入的数据是'.'则将当前树根置为空 
        {
            *bt = NULL;
        }
        else                      //读入正常数据,为当前树根分配地址空间 
        {
            *bt = (BiTree)malloc(sizeof(BiTNode));
            (*bt)->data = ch;
            CreateBiTree(&((*bt)->LChild)); //递归调用CreateBiTree()函数,处理左子树 
            CreateBiTree(&((*bt)->RChild)); //递归调用CreateBiTree()函数,处理右子树 
        }
    }
    
    void PreOrder(BiTree root) //先序遍历二叉树,root为指向二叉树根结点的指针 
    {
        if(root!=NULL)    
        {
            printf("%c ",root->data);      //访问根结点 
            PreOrder(root->LChild);        //先序遍历左子树 
            PreOrder(root->RChild);        //先序遍历右子树
        }
    }
    
    void InOrder(BiTree root)    //中序遍历二叉树,root为指向二叉树根结点的指针
    { 
        if(root!=NULL)    
        {
            InOrder(root->LChild);      //中序遍历左子树
            printf("%c ",root->data);      //访问根结点 
            InOrder(root->RChild);      //中序遍历右子树
        }
    }
    
    void PostOrder(BiTree root)     //中序遍历二叉树,root为指向二叉树根结点的指针
    { 
        if(root!=NULL)             
        {
            PostOrder(root->LChild);      //后序遍历左子树
            PostOrder(root->RChild);      //后序遍历右子树
            printf("%c ",root->data);      //访问根结点 
        }
    }
    
    void Leaf(BiTree root)
    {
        if(root!=NULL)
        {
            Leaf(root->LChild);
            Leaf(root->RChild);
            if(root->LChild==NULL && root->RChild==NULL)
            {
                LeafCount++;   //统计叶子结点数目
            }
        }
    } 
    
    void Degree1(BiTree root)
    {
        if(root!=NULL)
        {
            Degree1(root->LChild);
            Degree1(root->RChild);
            if((root->LChild==NULL && root->RChild!=NULL)||(root->LChild!=NULL && root->RChild==NULL))
            {
                Degree1Count++;   //统计度为1的结点数目
            }
        }
    } 
    
    void Degree2(BiTree root)
    {
        if(root!=NULL)
        {
            Degree2(root->LChild);
            Degree2(root->RChild);
            if(root->LChild!=NULL && root->RChild!=NULL)
            {
                Degree2Count++;   //统计度为2的结点数目
            }
        }
    } 
     

    转载于:https://www.cnblogs.com/qftm/p/10317159.html

    展开全文
  • 统计二叉树叶子节点个数

    千次阅读 2014-06-29 10:21:26
    package tree; public class ... * 统计二叉树中叶子节点个数 * @param args */ public static int count(TreeNode root){ if(root==null) return 0; int sum = 0; if(root.left==null&&root.r

    package tree;
    
    public class CountleafNode {
    
    	/**
    	 * 统计二叉树中叶子节点的个数
    	 * @param args
    	 */
    	public static int count(TreeNode root){
    		if(root==null) return 0;
    		int sum = 0;
    		if(root.left==null&&root.right==null){
    			return 1;
    		}
    		sum+=count(root.left);
    		sum+=count(root.right);
    		return sum;
    	}
    	public static void main(String[] args) {
    		TreeNode root = new TreeNode(1);
    		root.left = new TreeNode(2);
    		root.right = new TreeNode(3);
    		root.left.left = new TreeNode(4);
    		root.left.right = new TreeNode(5);
    		System.out.println(count(root));
    
    	}
    
    }
    


    展开全文
  • #include #include/*输出二叉树叶子节点、叶子节点数目、二叉树高度*/ ...//用于统计叶子节点数目// typedef struct Node {  DataType data;  struct Node *LChild;  struct Node *RChild; }Bit
  • 二叉树之统计二叉树中叶子节点个数 二叉树的叶子节点是既没有左子树又没有右子树的特殊的节点,使用递归我们可以方便的计算出共有多少叶子节点。 public class TreeNode { int val; TreeNode left; TreeNode ...
  • } // CountLeaf /* void leaf(BiTree T){//递归统计叶子节点数目 int count; if(T){ if(T->lchild==NULL&&T->rchild==NULL) count++; leaf(T->lchild); leaf(T->rchild); } } */ //先序 /* int CountLeaf(BiTree ...
  • 二叉树叶子结点,非叶子节点以及深度的计算

    千次阅读 多人点赞 2018-12-30 12:34:36
    //统计叶子结点数目 int LeafNum(BiTree T) { if (!T) { return 0; } else if (!T-&gt;lchild &amp;&amp; !T-&gt;rchild) { return 1; } else { return LeafNum(T-&gt;lchild) + ...
  • 计算二叉树叶子结点数目

    千次阅读 2018-05-03 22:44:39
    输出二叉树中叶子节点数目。ABD##EH###CF#I##G##4#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;cstdio&gt; #define DataType char using na...
  • 1.二叉树的相关算法的实现(链表)。 #include #include #define NULL 0 typedef struct tree { int data;...void create_btree(ElemBT *root, int list[], int n) /*n表示list数组中元素的个数*/ {
  • 1.在二叉搜索树中插入节点 2.前序、中序、后序遍历该二叉搜索树,写出遍历序列 3.输出二叉搜索树的深度、节点数目叶子节点数目 4.退出
  • int LeafCount(BiTree T){ if(T==NULL) return 0; if(T->lchild==NULL&&T->rchild==NULL) return 1; else return LeafCount(T->lchild)+LeafCound(T->rchild);} 转载于:...
  • 第一行为为叶子结点的数据值,各数据用空格分隔,第二行为叶子结点个数。 输入示例: abc@@de# 输出: b d e 3 按照题意用数组来做十分简单,要注意的是初始化要给整个数组赋初始值‘@’否则最底层的叶子结点无法...
  • 输出二叉树叶子节点数目

    千次阅读 2016-09-15 22:34:16
    非递归实现统计二叉树叶子节点数目,按层次遍历,需要借助队列来实现 先定义一个变量,用来计数叶子节点 根节点入队,在while循环的时候,先出队,然后用当前节点指向出队队头节点 如果存在左孩子节点,则左孩子...
  • 1.二叉树采用二叉链表存储结构,统计所有结点数目 int n=0; void count(BTNode *p) { if(p!=NULL) { n++; count(p-&gt;lchild); count(p-&gt;rchild); } } 2.二叉树采用二叉链表存储结构,统计...
  • c语言,二叉树的先序,中序,后序遍历以及叶子结点数目
  • 编写递归算法,计算二叉树中叶子结点数目。熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用学院名称 学生姓名 课程名称 数据结构专业班级 学号 实验题目 2 树...
  • 统计二叉树叶子结点个数

    千次阅读 2019-10-16 15:30:21
    本题要求实现一个函数,可统计二叉树的叶子结点个数。 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0。 裁判测试程序样例: #include ...
  • 和线段树的原理一样,逐层递归去建树,然后统计叶子节点就可以了。 当时自己想的是可不可以一边建树一边统计黑点的数目,好像不是很可行,或者说自己太笨, 没想到怎么写。 #include #include #include #include ...
  • 计算二叉树叶子结点数目(C语言)

    万次阅读 2021-04-07 19:37:49
    其实这个的算法已经在前面写出来了,但为大家看的方便,我还是再发一遍把。 #include<stdio.h> #include<stdlib.h> int depth; typedef struct Node{ char data; struct Node *Lchild;...
  • 树--统计二叉树叶子节点数目

    千次阅读 2019-06-28 21:11:35
    void leaf(Pnode T){//递归统计叶子节点数目 if(T){ if(T->lchild==NULL&&T->rchild==NULL) cnt++; leaf(T->lchild); leaf(T->rchild); } } int main(){ Pnode T; T=creat(); leaf(T); cout; } ...
  • 统计二叉树中叶子节点数目

    万次阅读 多人点赞 2017-06-01 20:51:03
    //后序遍历统计叶子节点数目 int Leaf2(BiTree T);//分治法统计叶子节点数目 int main(void) { BiTree root=CreateBiTree(); int count=Leaf2(root); printf("%d\n",count); Leaf1(root); printf("%d\n",ans);...
  • 总结的一些关于二叉树的算法,与大家共享(如统计叶子节点,复制二叉树,节点数目,深度算法等等等)
  • 树中的叶子结点个数 计算方法

    万次阅读 多人点赞 2018-03-15 15:32:05
    树中的叶子结点个数 计算方法 在学习树的时候经常会遇到计算树中叶子结点个数的题,比如现在有这样一道题 已知在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点...
  • 如题,C# codes 递归如下: class Program { static void Main(string[] args) { TreeNode node1 = new TreeNode("1"); TreeNode node2 = new TreeNode("... TreeNo...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,314
精华内容 7,325
关键字:

统计叶子节点的个数