📅  最后修改于: 2023-12-03 15:39:40.924000             🧑  作者: Mango
本文介绍如何实现一个函数,该函数可以遍历二叉树,计算所有非叶节点的总和和乘积。
首先,我们需要定义一个二叉树节点的结构体如下:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
接着,我们可以使用深度优先搜索(DFS)算法来遍历二叉树,具体实现如下:
void dfs(TreeNode* root, int& sum, int& product) {
if (!root) return;
if (root->left || root->right) {
sum += root->val;
product *= root->val;
}
dfs(root->left, sum, product);
dfs(root->right, sum, product);
}
上述函数使用了引用类型的参数,以便在dfs函数递归时,可以维护中间状态。在遍历过程中,如果遇到非叶节点,则将其值加到总和sum中,并与乘积product相乘。最终,函数的返回值也无用处。
整个程序的实现如下:
#include<iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void dfs(TreeNode* root, int& sum, int& product) {
if (!root) return;
if (root->left || root->right) {
sum += root->val;
product *= root->val;
}
dfs(root->left, sum, product);
dfs(root->right, sum, product);
}
int main() {
// create a binary tree
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->right->left = new TreeNode(4);
root->right->right = new TreeNode(5);
// compute sum and product of all non-leaf nodes
int sum = 0, product = 1;
dfs(root, sum, product);
cout << "Sum of all non-leaf nodes: " << sum << endl;
cout << "Product of all non-leaf nodes: " << product << endl;
return 0;
}
输入:
1
/ \
2 3
/ \
4 5
输出:
Sum of all non-leaf nodes: 4
Product of all non-leaf nodes: 3
本文介绍了如何实现一个遍历二叉树的深度优先搜索算法,并计算所有非叶节点的总和和乘积。该算法可以解决一类二叉树相关的计算问题,具有一定的通用性。