设计算法CountNode统计二叉树T中结点数据域值是偶数的结点总数,无返回值,用c或c++
时间: 2024-02-11 08:05:19 浏览: 77
以下是C++实现:
```C++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void CountNode(TreeNode* root, int& count) {
if (root == nullptr) { // 空结点直接返回
return;
}
if (root->val % 2 == 0) { // 如果当前结点的数据域值为偶数,计数器加一
count++;
}
CountNode(root->left, count); // 递归遍历左子树
CountNode(root->right, count); // 递归遍历右子树
}
```
其中,`CountNode`函数接受二叉树根结点指针和计数器`count`的引用作为参数,通过引用传递的方式实现计数器值的修改。在函数内部,先判断当前结点是否为空,如果为空直接返回;否则如果当前结点的数据域值为偶数,计数器加一。然后递归遍历左子树和右子树。最后,调用`CountNode`函数即可统计二叉树中结点数据域值是偶数的结点总数,计数器的值即为所求。
相关问题
统计二叉树中结点数据域值是偶数的结点数的算法
可以采用递归的方式遍历整棵二叉树,在遍历过程中统计数据域值为偶数的结点数量。具体算法步骤如下:
1. 如果当前结点为空,则返回 0。
2. 统计当前结点的数据域值是否为偶数,如果是,则计数器加一。
3. 递归遍历当前结点的左子树,统计其中数据域值为偶数的结点数量。
4. 递归遍历当前结点的右子树,统计其中数据域值为偶数的结点数量。
5. 返回当前结点及其子树中数据域值为偶数的结点数量之和。
以下是该算法的 Python 代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def count_even_nodes(root):
if not root:
return 0
count = 1 if root.val % 2 == 0 else 0
count += count_even_nodes(root.left)
count += count_even_nodes(root.right)
return count
# 示例用法
root = Node(2)
root.left = Node(1)
root.right = Node(4)
root.right.left = Node(3)
root.right.right = Node(6)
count = count_even_nodes(root)
print(count) # 输出 3
```
1、实现查询二叉树中的某个结点的算法 2、实现统计二叉树中叶子结点个数的算法 3、实现统计二叉树中所有结点个数的算法 4、实现求二叉树深度的算法 用数据结构算法实现
1. **查询二叉树中的某个结点**:
要查找一个给定值的节点,可以采用递归或迭代的方式遍历二叉搜索树。从根节点开始,如果目标值小于当前节点的值,则在左子树中继续查找;如果目标值大于当前节点,就在右子树中查找;直到找到相等的值或者遍历到空子树为止。
```python
def search_binary_tree(root, target):
if root is None or root.val == target:
return root
elif target < root.val:
return search_binary_tree(root.left, target)
else:
return search_binary_tree(root.right, target)
```
2. **统计二叉树中叶子结点个数**:
叶子节点是没有子节点的节点,所以我们可以简单地在递归过程中增加计数器每当遇到叶子节点时加一。
```python
def count_leaves(node):
if node is None:
return 0
return 1 + count_leaves(node.left) + count_leaves(node.right) if node.left and node.right else (1 if not node.left and not node.right else 0)
```
3. **统计二叉树中所有结点个数**:
同样通过递归,对每个节点都累加1。
```python
def count_nodes(node):
if node is None:
return 0
return 1 + count_nodes(node.left) + count_nodes(node.right)
```
4. **求二叉树深度**:
可以通过计算左子树和右子树的最大深度并加上1来得到。
```python
def tree_depth(node):
if node is None:
return 0
return max(tree_depth(node.left), tree_depth(node.right)) + 1
```
阅读全文