/** * Find sum of all left leaves in a given Binary Tree * * Tags: Tree, DFS */ class SumOfLeftLeaves { public static void main(String[] args) { SumOfLeftLeaves s = new SumOfLeftLeaves(); int sum = s.sumOfLeftLeaves(s.buildTree()); System.out.println(sum); } /** * DFS, recursive * Make sure current node is not null * Check whether left child is leaf node * If yes, add its value to result * If not, recurse on the left subtree * Recurse on the right subtree after that */ public int sumOfLeftLeaves(TreeNode root) { int res = 0; if (root != null) { if (isLeaf(root.left)) { res += root.left.val; } else { res += sumOfLeftLeaves(root.left); } res += sumOfLeftLeaves(root.right); } return res; } private boolean isLeaf(TreeNode n) { if (n == null) return false; if (n.left == null && n.right == null) return true; return false; } private TreeNode buildTree() { TreeNode t0 = new TreeNode(20); TreeNode t1 = new TreeNode(9); TreeNode t2 = new TreeNode(49); TreeNode t3 = new TreeNode(5); TreeNode t4 = new TreeNode(12); TreeNode t5 = new TreeNode(15); TreeNode t6 = new TreeNode(23); TreeNode t7 = new TreeNode(52); TreeNode t8 = new TreeNode(50); t0.left = t1; t0.right = t2; t1.left = t3; t1.right = t4; t4.right = t5; t2.left = t6; t2.right = t7; t7.left = t8; return t0; } class TreeNode { TreeNode left; TreeNode right; int val; public TreeNode(int val) { this.val = val; } } }