노드를 구성한후, y값이 가장 큰 노드를 정해야 하는데, 어떻게 찾을 것인가?
-> 정렬하자!
-> y가 가장 높은 값이 앞쪽 인덱스에 위치하게 하고, x값이 동일하다면,
이진트리 확정이므로 ,x값이 작은 순서대로 정렬하자.
노드간 연결 할때 어떻게 할 것이냐? 에 대해서
루트 노드 하나와 순차적으로 자식 값들 비교해서 진행하자
문제의 힌트에서
반드시 서로 다른 x값을 가진다라는 점 이라는 것을 알고 나면 이진트리
정의하는데 쉽게 조건 만들수 있다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Node
{
    int num;
    int x;
    int y;
    Node *right;
    Node *left;
};
bool compare(Node a, Node b)
{
    if(a.y > b.y)
    {
        return true;
    }
    else if(a.y == b.y)
    {
        return a.x < b.x;
    }
    
    
    return false;
}
void AddNode(Node *root, Node *child)
{
    //루트 노드의 오른쪽에 자식을 위치하자.
    if(root->x < child->x)
    {
        if(root->right == nullptr)
        {
            root->right = child;
        }
        else
        {
            AddNode(root->right, child);
        }
    }
    //루트 노드의 왼쪽에 자식을 위치하자.
    else
    {
        if(root->left == nullptr)
        {
            root->left = child;
        }
        else
        {
            AddNode(root->left, child);
        }
    }
}
void PreOrder(Node *cur, vector<int>&v)
{
    if(cur == nullptr)
        return;
    v.push_back(cur->num);
    PreOrder(cur->left, v);
    PreOrder(cur->right, v);
}
void PostOrder(Node *cur, vector<int>&v)
{
    if(cur == nullptr)
        return;
    
    PostOrder(cur->left, v);
    PostOrder(cur->right, v);
    v.push_back(cur->num);
}
vector<vector<int>> solution(vector<vector<int>> nodeinfo) {
    vector<vector<int>> answer;
    
    vector<Node> v(nodeinfo.size());
    
    for(int i = 0; i < nodeinfo.size(); i++)
    {
        v[i].num = i + 1;
        v[i].x = nodeinfo[i][0];
        v[i].y = nodeinfo[i][1];
    }
    
    sort(v.begin(), v.end(), compare);
    
    //연결리스트로 연결하자.
    
    Node *Root = &v[0];
    
    for(int i = 1; i< v.size(); i++)
    {
        AddNode(Root, &v[i]);
    }
    
    vector<int>pre;
    //전위 순회, 후위 순회 진행하자.
    PreOrder(Root, pre);
    
    vector<int>post;
    PostOrder(Root, post);
    
    answer.push_back(pre);
    answer.push_back(post);
    
    
    return answer;
}