Find the sum of all left leaves in a given binary tree.
Example:
3 / \ 9 20 / \ 15 7 There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.My code:
非递归方法:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int sumOfLeftLeaves(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
int sum =0;
if (root==null) return sum;
TreeNode cur = root;
while(cur!=null||!stack.isEmpty()){
if(cur.right!=null) stack.push(cur.right);
if (cur.left!=null){
if (cur.left.left==null && cur.left.right ==null){
sum += cur.left.val;
}
cur = cur.left;
}
else if (!stack.isEmpty()) cur = stack.pop();
else cur = null;
}
return sum;
}
}
递归方法:
public class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root==null) return 0;
int sum =0;
if (root.left!=null){
if(root.left.left==null&& root.left.right==null) sum+=root.left.val;
else sum += sumOfLeftLeaves(root.left);
}
sum+=sumOfLeftLeaves(root.right);
return sum;
}
}
总结:非递归方法自己做的,递归方法不常用反而生疏了,看了答案。说明一个问题,多练习总是好的。