very easy to understand, Readable
BFS\njava\n    public int findBottomLeftValue(TreeNode root) {\n        Queue<TreeNode> queue = new LinkedList<TreeNode>();\n        queue.offer(root);\n       
**BFS**\n```java\n    public int findBottomLeftValue(TreeNode root) {\n        Queue<TreeNode> queue = new LinkedList<TreeNode>();\n        queue.offer(root);\n        int min=Integer.MAX_VALUE;\n        while(!queue.isEmpty()){\n            int size=queue.size();\n            min=queue.peek().val;\n            for(int i=0;i<size;i++){\n                TreeNode node = queue.poll();\n                if(node.left!=null) queue.offer(node.left);\n                if(node.right!=null) queue.offer(node.right);\n            }\n        }\n        return min;\n    }\n```\n\t\n    \n  **DFS**\n  \n```java\n    public int findBottomLeftValue(TreeNode root) {\n        Map<Integer,TreeNode> map = new HashMap<Integer,TreeNode>();\n        helper(root,map,0);\n        Set<Integer> set = map.keySet();\n        int max = Collections.max(set);\n        return map.get(max).val;\n    }\n    \n    public void helper(TreeNode root,Map<Integer,TreeNode> map, int level){\n        if(root.left==null && root.right==null) {\n            if(map.get(level)==null) map.put(level,root);\n            return;\n        }\n        if(root.left!=null) helper(root.left,map,level+1);\n        if(root.right!=null) helper(root.right,map,level+1);\n    }\n```
['Depth-First Search', 'Breadth-First Search', 'Recursion', 'Java']