原题地址:https://leetcode-cn.com/problems/sum-of-left-leaves/
题目描述:
计算给定二叉树的所有左叶子之和。
示例:
代码:
递归:前序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int sum;
public int sumOfLeftLeaves(TreeNode root) {
sum = 0;
preOrder(root);
return sum;
}
public void preOrder(TreeNode root)
{
if(root == null) return;
TreeNode node = root.left;
if(node != null && node.left == null && node.right == null) sum += node.val;
preOrder(root.left);
preOrder(root.right);
}
}
迭代:
/**
* 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) {
Stack<TreeNode> s = new Stack<>();
s.push(root);
int sum = 0;
if(root == null) return sum;
while(!s.isEmpty())
{
TreeNode node = s.pop();
if(node.right != null) s.push(node.right);
if(node.left != null)
{
s.push(node.left);
if(node.left.left == null && node.left.right == null)
sum += node.left.val;
}
}
return sum;
}
}