[LeetCode]404. Sum of Left Leaves 树的典型题目

来源:互联网 发布:nginx转发配置 编辑:程序博客网 时间:2024/06/05 10:51

Find the sum of all left leaves in a given binary tree.

Example:

    3   / \  9  20    /  \   15   7There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.
Recursive method. For given node we check whether its left child is a leaf. If it is the case, we add its value to answer, otherwise recursively call method on left child. For right child we call method only if it has at least one nonnull child.

/** * 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) {        int sum=0;        if(root==null) return 0;        if(root.left!=null){            if(root.left.left==null && root.left.right==null) sum+=root.left.val;            else sum+=sumOfLeftLeaves(root.left);        }        if(root.right!=null){            if(root.right.left!=null || root.right.right!=null)                sum+=sumOfLeftLeaves(root.right);        }        return sum;    }}


Iterative method. Here for each node in the tree we check whether its left child is a leaf. If it is true, we add its value to answer, otherwise add left child to the stack to process it later. For right child we add it to stack only if it is not a leaf.

/** * 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) {        if(root==null) return 0;        int res=0;        Stack<TreeNode> stack = new Stack<>();        stack.push(root);                while(!stack.isEmpty()){            TreeNode node = stack.pop();            if(node.left!=null){                if(node.left.left==null && node.left.right==null) res+=node.left.val;                else stack.push(node.left);            }            if(node.right!=null)                if(node.right.left!=null || node.right.right!=null)                     stack.push(node.right);                    }                return res;    }}



原创粉丝点击