二叉树——8.左叶子之和

力扣题目链接

计算给定二叉树的所有左叶子之和。

示例:

9+15=24

首先,分析左叶子到底是什么?节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。

结合完整代码进行分析:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def sumOfLeftLeaves(self, root):
        if root is None:
            return 0
        if root.left is None and root.right is None:
            return 0
        
        leftValue = self.sumOfLeftLeaves(root.left)  # 左
        if root.left and not root.left.left and not root.left.right:  # 左子树是左叶子的情况
            leftValue = root.left.val
            
        rightValue = self.sumOfLeftLeaves(root.right)  # 右

        sum_val = leftValue + rightValue  # 中
        return sum_val

首先,判断当前节点是否为空,如果当前节点为空就返回0;判断当前节点有没有左右子节点,如果既没有左子节点也没有右子节点(说明它是一个叶子节点),也返回 0。

其次,开始递归计算左子树中的左叶子节点值的和。首先检查当前节点的左子节点是否存在,并且该左子节点没有左孩子和右孩子,如果满足条件,说明root.left是一个左叶子节点。将左子节点值赋值给leftValue。

同理计算右子树中左叶子节点的和,最后相加得到sum_val。

### 二叉树中的父子节点概念 在二叉树中,父节点(Parent Node)是指拥有至少一个子节点的节点。每个父节点最多有两个子节点,分别被称为子节点(Left Child)和右子节点(Right Child)。对于任意非根节点而言,其必定存在唯一的父节点。 定义如下: - **父节点**:除了根节点外,任何节点都有唯一的一个父节点。 - **子节点**:一个节点可以有零个、一个或两个子节点;这两个子节点分别为子节点和右子节点[^1]。 ### 子节点的具体分类 - 子节点总是位于父节点侧位置; - 右子节点则处于右侧位置; - 如果某个节点既无也无右子节点,则该节点被称为叶子节点(Leaf Node),即终端节点。 ### 使用C语言实现二叉树及其父子关系 下面展示如何通过C语言来创建并初始化一棵简单的二叉树以及设置父子之间的连接方式: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构体 typedef struct BinaryTreeNode { char data; struct BinaryTreeNode *left, *right; } BTNode; // 创建新节点函数 BTNode* create_node(char value){ BTNode* newNode = (BTNode*)malloc(sizeof(BTNode)); newNode->data = value; newNode->left = NULL; newNode->right = NULL; return newNode; } int main(){ // 构建简单二叉树实例 BTNode *root = create_node('A'); // A作为根节点 root->left = create_node('B'); // B为A的孩子 root->right = create_node('C'); // C为A的右孩子 root->left->left = create_node('D'); // D为B的孩子 root->left->right = create_node('E'); // E为B的右孩子 printf("Binary Tree Created Successfully!\n"); free(root); // 清理内存分配 } ``` 此代码片段展示了基本的二叉树构建过程,并明确了各个节点间的父子关联。`create_node()` 函数用于生成新的二叉树节点,而 `main()` 中的操作则是按照指定的方式建立了几个具体的父子关系示例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值