//计算二叉树中的叶子结点,代码是否可行
int Getleaves(BiTree *t){
static int n=0;
if(t==Null)
return false;
if(t→lchild==Null&&t→rchild==Null){
n++;
Getleaves(t→lchild);
Getleaves(t→rchild);
}
return n;
}
如果解决您的问题,请点赞采纳,谢谢。
————————————————————————————
1、定义一个静态变量存储不合理,第二轮(非递归流程)调用不好处理。
2、第6行开始就不合理,为什么是左右都为空指针的时候才++
int countNodes(struct TreeNode* root) {
if (root == NULL) {
return 0;
} else {
return 1 + countNodes(root->left) + countNodes(root->right);
}
}
【以下回答由 GPT 生成】
以上代码不能正确计算二叉树中的叶子结点个数。以下是正确的实现代码:
int GetLeaves(BiTree t){
if(t == Null)
return 0;
if(t->lchild == Null && t->rchild == Null){
return 1;
}
int leftLeaves = GetLeaves(t->lchild);
int rightLeaves = GetLeaves(t->rchild);
return leftLeaves + rightLeaves;
}
代码说明: 1. 如果传入的二叉树为空,即为一个空树,叶子结点个数为0,直接返回0。 2. 如果当前节点的左孩子和右孩子都为空,说明当前节点是一个叶子结点,叶子结点个数为1,返回1。 3. 如果当前节点的左孩子或者右孩子不为空,递归调用函数GetLeaves分别计算左子树和右子树中的叶子结点个数,分别得到leftLeaves和rightLeaves。 4. 返回leftLeaves与rightLeaves之和,即为整棵二叉树中的叶子结点个数。
【相关推荐】