Leetcode 404 - 左叶子之和

1 题目

https://leetcode-cn.com/problems/sum-of-left-leaves/

2 题意

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

示例:

    3
   / \
  9  20
    /  \
   15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

3 解题思路

author's blog == http://www.cnblogs.com/toulanboy/

该题比较简单,考核的是二叉树的遍历。
(1)使用先、中、后,任意一种去遍历所有节点,然后逐一判断是否是左叶子。
(2)左叶子判断逻辑为:当前节点是叶子,再判断是否是其父亲的左孩子

**如何知道其是否是其父亲的左孩子? **
答:函数参数考虑多一个父亲指针,这样就可以时刻知道该节点的父亲。

4 代码实现

//author's blog == http://www.cnblogs.com/toulanboy/
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int ans = 0;
    //函数逻辑:使用先序遍历,遍历所有节点。然后逐一判断节点是否是左叶子
    //参数:root当前树的根, father是root的父亲(用来判断是否是其左孩子)
    void get_ans(TreeNode * root, TreeNode * father){
        if(root == NULL)//空树返回
            return;
        //左叶子判断:当前节点是叶子,再判断是否是其父亲的左孩子
        if(root->left == NULL && root->right == NULL && father && root == father->left){
            ans += root->val;
        }
        get_ans(root->left, root);// 遍历左子树
        get_ans(root->right, root);// 遍历右子树
    }
    int sumOfLeftLeaves(TreeNode* root) {
        get_ans(root, NULL);
        return ans;
    }
};
posted @ 2020-09-19 11:58  偷懒人  阅读(104)  评论(0编辑  收藏  举报