给定一个二叉树根节点root,返回所有左叶子之和,有输入和输出,C语言实现
时间: 2025-06-09 15:04:01 浏览: 10
在C语言中,给定一个二叉树的根节点`root`,计算并返回所有左叶子节点的和,可以按照递归的方式进行。首先,你需要定义一个结构体表示二叉树的节点,包含值和左右子节点指针。然后,你可以编写一个辅助函数`isLeftLeaf()`用于判断一个节点是否是左叶子节点,再编写主函数`sumOfLeftLeaves(root)`进行求和。
这是一个简单的C语言示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 判断是否是左叶子节点
int isLeftLeaf(TreeNode* node) {
if (node == NULL) return 0;
if (node->left == NULL && node->right == NULL) return 1; // 左叶子节点
return 0;
}
// 计算左叶子节点和
int sumOfLeftLeaves(TreeNode* root) {
if (root == NULL) return 0;
// 使用递归,如果当前节点是左叶子,加到结果上
int leftSum = isLeftLeaf(root) ? root->val : 0;
// 继续计算左子树和右子树,注意左子树是当前节点的左侧
int leftSubtreeSum = sumOfLeftLeaves(root->left);
int rightSubtreeSum = sumOfLeftLeaves(root->right);
return leftSum + leftSubtreeSum;
}
// 示例用法
int main() {
// 创建一个二叉树实例,并设置其节点值
TreeNode* root = malloc(sizeof(TreeNode));
root->val = 1;
root->left = malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
// ... 其他节点设置 ...
int result = sumOfLeftLeaves(root);
printf("所有左叶子节点的和为:%d\n", result);
free(root); // 清理内存
return 0;
}
阅读全文
相关推荐














