#include <iostream>
#include <vector>
using namespace std;

// Node Structure
class Node {
public:
    int data;
    Node* left;
    Node* right;

    Node(int x) {
        data = x;
        left = right = nullptr;
    }
};

// Recursive function to find left view
void recLeftView(Node* root, int level, vector<int>& result) {
    if (root == nullptr) return;

    // first node of current level
    if (level == result.size()) {
        result.push_back(root->data);
    }

  
    recLeftView(root->right, level + 1, result);
    
      recLeftView(root->left, level + 1, result);
}

// Function which return left view of binary tree
vector<int> leftView(Node* root) {
    vector<int> result;
    recLeftView(root, 0, result);
    return result;
}

int main() {
    // Create binary tree

    //    1
    //   / \
    //  2   3
    //     /
    //    4
    //     \
    //      5

    Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->right->left = new Node(4);
    root->right->left->right = new Node(5);

    vector<int> view = leftView(root);
    for (int val : view)
        cout << val << " ";
}