From e6bdd500df47d3c9823b366926362e610ff9c843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Wed, 14 Nov 2018 22:43:57 +0800 Subject: [PATCH] Create 404. Sum of Left Leaves.md --- 404. Sum of Left Leaves.md | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 404. Sum of Left Leaves.md diff --git a/404. Sum of Left Leaves.md b/404. Sum of Left Leaves.md new file mode 100644 index 0000000..8742327 --- /dev/null +++ b/404. Sum of Left Leaves.md @@ -0,0 +1,49 @@ +# [404. Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/description/) +# 思路 +计算一棵二叉树所有左叶子的值之和。 +## 思路一 +设置一个初始为0的全局变量res,遍历一遍树,判断某节点的左子树是否是叶子,若是,则将这个叶子的值加至res,遍历完后返回res即可。 + +## 思路二 +直接递归计算结果res。因为某棵树的res等于其左子树的res加上右子树的res。 + +# C++ +## 思路一 +``` C++ +class Solution { +private: + int res = 0; + bool is_leaf(TreeNode *p){ // 判断是否是叶子 + if(p == NULL) return false; + return (p -> left == NULL && p -> right == NULL); + } + void find_left_leaf(TreeNode *root){ + if(root == NULL || is_leaf(root)) return; + + if(is_leaf(root -> left)) res += root -> left -> val; // 左子树是叶子,加至res + else find_left_leaf(root -> left); + find_left_leaf(root -> right); + } +public: + int sumOfLeftLeaves(TreeNode* root) { + find_left_leaf(root); + return res; + } +}; +``` +## 思路二 +``` C++ +class Solution { +private: + bool is_leaf(TreeNode *p){ // 判断是否是叶子 + if(p == NULL) return false; + return (p -> left == NULL && p -> right == NULL); + } +public: + int sumOfLeftLeaves(TreeNode* root) { + if(root == NULL || is_leaf(root)) return 0; + if(is_leaf(root -> left)) return (root -> left -> val) + sumOfLeftLeaves(root -> right); + else return sumOfLeftLeaves(root -> left) + sumOfLeftLeaves(root -> right); + } +}; +```