categories: [Blog,Algorithm]
404. 左叶子之和
难度简单286
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24.
一个节点为「左叶子」节点,当且仅当它是某个节点的左子节点,并且它是一个叶子结点。因此我们可以考虑对整棵树进行遍历,当我们遍历到节点
node 时,如果它的左子节点是一个叶子结点,那么就将它的左子节点的值累加计入答案。
遍历整棵树的方法有深度优先搜索和广度优先搜索,下面分别给出了实现代码。
深度优先搜索
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int sumOfLeftLeaves(TreeNode root) {return root != null ? dfs(root) : 0;}public int dfs(TreeNode node) {int ans = 0;if (node.left != null) {ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);}if (node.right != null && !isLeafNode(node.right)) {ans += dfs(node.right);}return ans;}public boolean isLeafNode(TreeNode node) {return node.left == null && node.right == null;}// 作者:LeetCode-Solution// 链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/zuo-xie-zi-zhi-he-by-leetcode-solution/}
广度优先遍历
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root == null) {return 0;}Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);int ans = 0;while (!queue.isEmpty()) {TreeNode node = queue.poll();if (node.left != null) {if (isLeafNode(node.left)) {ans += node.left.val;} else {queue.offer(node.left);}}if (node.right != null) {if (!isLeafNode(node.right)) {queue.offer(node.right);}}}return ans;}public boolean isLeafNode(TreeNode node) {return node.left == null && node.right == null;}// 作者:LeetCode-Solution// 链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/zuo-xie-zi-zhi-he-by-leetcode-solution/}
