3 Approaches, DFS & Iterative, Simple & Easy, [C++]
Implementation\n\n1st Approach\nUsing level order traversal from left to right\nTime Complexity = O(N), Space Complexity = O(N)\n\nclass Solution {\npublic:\n  
Implementation\n\n**1st Approach\nUsing level order traversal from left to right\nTime Complexity = O(N), Space Complexity = O(N)**\n```\nclass Solution {\npublic:\n    int findBottomLeftValue(TreeNode* root) {        \n        queue<TreeNode*> q;\n        q.push(root);\n        int ans = root->val;\n        \n        while(!q.empty()){\n            int size = q.size();\n            for(int itr = 0; itr < size; itr++){\n                TreeNode *temp = q.front();            \n                q.pop();\n                if(itr == 0) ans = temp->val;                \n                if(temp->left) q.push(temp->left);\n                if(temp->right) q.push(temp->right);\n            }\n        }\n        return ans;\n    }\n};\n```\n\n\n**2nd Approach\nUsing level order traversal from right to left\nTime Complexity = O(N), Space Complexity = O(N)**\n```\nclass Solution {\npublic:\n    int findBottomLeftValue(TreeNode* root) {        \n        queue<TreeNode*> q;\n        q.push(root);\n        int ans = root->val;\n        \n        while(!q.empty()){\n            int size = q.size();\n            for(int itr = 0; itr < size; itr++){\n                TreeNode *temp = q.front();            \n                q.pop();\n                if(itr == size-1) ans = temp->val;\n                if(temp->right) q.push(temp->right);\n                if(temp->left) q.push(temp->left);\n            }\n        }\n        return ans;\n    }\n};\n```\n\n**3rd Approach\nEfficient Solution\nUsing DFS\nTime Complexity = O(N), Space Complexity = O(H), where H is the Height of the tree**\n```\nclass Solution {\npublic:\n    void findBottomLeftValue(TreeNode* root, int depth, int &maxDepth, int &ans) {\n        if(!root) return;\n        findBottomLeftValue(root->left, depth+1, maxDepth, ans);\n        findBottomLeftValue(root->right, depth+1, maxDepth, ans);\n        \n        if(depth > maxDepth){\n            maxDepth = depth;\n            ans = root->val;\n        }\n    }\n    \n    int findBottomLeftValue(TreeNode* root) {        \n        int ans = root->val;\n        int depth = 0, maxDepth = 0;\n        findBottomLeftValue(root, depth, maxDepth, ans);\n        return ans;\n    }\n};\n```\nIf you find any issue in understanding the solution then comment below, will try to help you.\nIf you found my solution useful.\nSo **please do upvote and encourage me** to document all leetcode problems\uD83D\uDE03\nHappy Coding **:)**
['Depth-First Search', 'Breadth-First Search', 'Queue', 'C', 'Binary Tree', 'Iterator']