数据结构第6次练习-树和二叉树(基础篇)

一、单选题

二、判断题、

三、函数题

6-1 统计二叉树结点个数

思路:二叉树的结点个数就是左节点的个数加右节点的个数加根节点

代码实现:

int NodeCount(Bitree T){
if(!T){
return 0;//如果根节点是空,显然是0;
}
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;





}

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

思路:边界条件:
如果传入的二叉树节点指针 T 为空指针(即 !T),表示当前子树为空,叶子节点个数为0。因此,返回0作为边界条件。
非边界条件:
如果传入的二叉树节点指针 T 不为空,即存在当前节点。然后,判断当前节点的左子节点和右子节点是否都为空(即 !T->lchild && !T->rchild)。如果都为空,表示当前节点是叶子节点,叶子节点个数为1。因此,返回1作为非边界条件。
如果当前节点的左子节点不为空(即 T->lchild),则递归调用 LeafCount 函数计算左子树的叶子节点个数,并将结果累加到叶子节点个数上。
如果当前节点的右子节点不为空(即 T->rchild),则递归调用 LeafCount 函数计算右子树的叶子节点个数,并将结果累加到叶子节点个数上。
最后,返回叶子节点个数作为函数的结果。
通过递归的方式,可以遍历二叉树的所有节点,并统计叶子节点的个数。递归的终止条件是节点为空或节点为叶子节点。每次递归调用时,将问题分解为更小规模的子问题,直到达到边界条件。最后将子问题的结果累加起来,即可得到整个二叉树的叶子节点个数。

int LeafCount(BiTree T){
if(!T){
return 0;
}
if(!T->lchild&!T->rchild){
return 1;
}
return LeafCount(T->lchild)+LeafCount(T->rchild);
}

思路:边界条件:首先是如果传入的二叉树节点指针 T 为空指针(即 !T),表示当前子树为空,

非边界条件:
当传入的二叉树节点指针不为空时,即存在当前节点。然后,判断当前节点的度。度为1的节点是指只有一个子节点的节点。因此,判断当前节点的左子节点和右子节点是否只有一个为空。如果是,则表示当前节点是度为1的节点,度为1的节点个数为1。因此,返回1作为非边界条件。
如果当前节点的左子节点不为空,则递归调用 countDegreeOneNodes 函数计算左子树中度为1的节点个数,并将结果累加到度为1的节点个数上。
如果当前节点的右子节点不为空,则递归调用 countDegreeOneNodes 函数计算右子树中度为1的节点个数,并将结果累加到度为1的节点个数上。
最后,返回度为1的节点个数作为函数的结果。

 

int NodeCount(BiTree T){
    if(!T){
        return 0;
    }
    if((T->lchild&&!T->rchild)||(!T->lchild&&T->rchild)){
        return 1+NodeCount(T->lchild)+NodeCount(T->rchild);
    }
    return NodeCount(T->lchild)+NodeCount(T->rchild);
    
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值