用C++实现:已知一个二叉树,分别求它的双亲结点个数和叶子结点个数
时间: 2024-01-28 14:05:26 浏览: 89
好的,我来回答你的问题。
对于一个二叉树,我们可以通过遍历来统计它的双亲结点个数和叶子结点个数。
具体实现如下:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 统计双亲结点个数
int countParent(TreeNode* root) {
if (!root) return 0;
if (root->left || root->right) {
return countParent(root->left) + countParent(root->right) + 1;
}
return 0;
}
// 统计叶子结点个数
int countLeaf(TreeNode* root) {
if (!root) return 0;
if (!root->left && !root->right) {
return 1;
}
return countLeaf(root->left) + countLeaf(root->right);
}
```
其中,`countParent()` 函数用来统计双亲结点个数,如果当前结点有左右子树,则它是一个双亲结点,返回左子树和右子树的双亲结点个数加1。
`countLeaf()` 函数用来统计叶子结点个数,如果当前结点没有左右子树,则它是一个叶子结点,返回1,否则递归计算左子树和右子树的叶子结点个数。
希望对你有所帮助!
阅读全文