一、单选题
二、判断题、
三、函数题
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); }