240808

문제 : 길 찾기 게임 난이도 : Lv.3

풀이

function solution(nodeinfo) {
    // 노드 정보에 index를 추가 (노드 번호 저장)
    nodeinfo = nodeinfo.map((node, index) => [...node, index + 1]);

    // y 좌표 기준 내림차순, x 좌표 기준 오름차순으로 정렬
    nodeinfo.sort((a, b) => b[1] - a[1] || a[0] - b[0]);

    // 이진 트리를 구성하는 함수
    function insertNode(parent, child) {
        if (child[0] < parent[0]) {
            if (parent.left === null) {
                parent.left = child;
            } else {
                insertNode(parent.left, child);
            }
        } else {
            if (parent.right === null) {
                parent.right = child;
            } else {
                insertNode(parent.right, child);
            }
        }
    }

    // 트리 구조 생성
    let root = nodeinfo[0];
    root.left = null;
    root.right = null;

    for (let i = 1; i < nodeinfo.length; i++) {
        nodeinfo[i].left = null;
        nodeinfo[i].right = null;
        insertNode(root, nodeinfo[i]);
    }

    // 전위 순회 (Preorder)
    let preorder = [];
    function preorderTraversal(node) {
        if (node) {
            preorder.push(node[2]);
            preorderTraversal(node.left);
            preorderTraversal(node.right);
        }
    }
    preorderTraversal(root);

    // 후위 순회 (Postorder)
    let postorder = [];
    function postorderTraversal(node) {
        if (node) {
            postorderTraversal(node.left);
            postorderTraversal(node.right);
            postorder.push(node[2]);
        }
    }
    postorderTraversal(root);

    return [preorder, postorder];
}

Last updated