C语言完整实现求根节点到叶节点数字之和
时间: 2024-03-09 14:47:10 浏览: 94
您好,这是一个求二叉树根节点到叶子节点数字之和的问题。您可以使用递归函数来实现。
首先,定义一个二叉树的结构体:
```
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
然后,实现一个递归函数,传入当前节点和当前节点到根节点的数字和:
```
int sumNumbers(TreeNode* root, int curSum) {
if (!root) return 0; // 如果当前节点为空,返回0
curSum = curSum * 10 + root->val; // 更新当前节点到根节点的数字和
if (!root->left && !root->right) return curSum; // 如果当前节点为叶子节点,返回当前节点到根节点的数字和
return sumNumbers(root->left, curSum) + sumNumbers(root->right, curSum); // 递归遍历左右子树
}
```
最后,在主函数中调用该函数并传入根节点和初始值0即可:
```
int main() {
// 构造二叉树
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = NULL;
int sum = sumNumbers(root, 0); // 计算根节点到叶子节点数字之和
printf("The sum of root-to-leaf numbers is %d\n", sum);
return 0;
}
```
以上是一种基于递归的实现方式,希望能够帮到您!
阅读全文