관리 메뉴

Daehyunii's Dev-blog

1μ£Όμ°¨ 과제 - 트리λ₯Ό μ΄μš©ν•˜μ—¬ μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ 순회λ₯Ό κ²€μƒ‰ν•˜μ—¬ 직접 κ΅¬ν˜„ν•΄λ³΄μ„Έμš”. λ³Έλ¬Έ

πŸ“„ Dev Course/Assignment

1μ£Όμ°¨ 과제 - 트리λ₯Ό μ΄μš©ν•˜μ—¬ μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ 순회λ₯Ό κ²€μƒ‰ν•˜μ—¬ 직접 κ΅¬ν˜„ν•΄λ³΄μ„Έμš”.

Daehyunii 2022. 10. 25. 01:17
 μ΄μ§„ 트리 순회 κ΅¬ν˜„ 방법

  이번 κ³Όμ œλŠ” 이진 트리λ₯Ό μˆœνšŒν•˜λŠ” λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” 것이닀. 기본적으둜 이진 트리의 κ²½μš°μ—λŠ” 트리 μžλ£Œκ΅¬μ‘°κ°€ κ°–λŠ” κ·œμΉ™μ— μžμ‹ λ…Έλ“œλ₯Ό μ΅œλŒ€ 2κ°œκΉŒμ§€ κ°€μ§ˆ 수 μžˆλ‹€λŠ” κ·œμΉ™μ΄ μΆ”κ°€λœ μžλ£Œκ΅¬μ‘°μ΄λ‹€. 이진 트리λ₯Ό μˆœνšŒν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” BFS와 DFS λͺ¨λ‘ κ°€λŠ₯ν•˜μ§€λ§Œ 이번 κ³Όμ œμ—μ„œλŠ” DFSλ₯Ό ν™œμš©ν•˜μ—¬ μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ 순회λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것이닀. 

 

  μ „μœ„ μˆœνšŒμ™€ μ€‘μœ„ 순회, 그리고 ν›„μœ„ 순회λ₯Ό λ‚˜λˆ„λŠ” 기쀀은 λΆ€λͺ¨ λ…Έλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ λ‚˜λ‰˜κ²Œ λœλ‹€. λ§Œμ•½ λΆ€λͺ¨ λ…Έλ“œλ₯Ό κ°€μž₯ λ¨Όμ € μˆœνšŒν•œλ‹€λ©΄ μ „μœ„ μˆœνšŒκ°€ λ˜λŠ” 것이고, 쀑간에 μˆœνšŒν•˜λ©΄ μ€‘μœ„ 순회, λ§ˆμ§€λ§‰μ— μˆœνšŒν•˜λ©΄ ν›„μœ„ μˆœνšŒκ°€ λ˜λŠ” 것이닀. λ‚΄κ°€ κ΅¬ν˜„ν•œ 방법은 배열에 μˆœνšŒν•˜λŠ” μš”μ†Œ 값듀을 μ°¨κ·Ό μ°¨κ·Ό push( )ν•΄μ„œ λ§ˆμ§€λ§‰μ— λ°˜ν™˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ μˆœνšŒν•˜λŠ” λ‘œμ§μ„ κ΅¬ν˜„ν–ˆλ‹€. 

μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ 순회 κΈ°μ€€

  DFSλŠ” 쑰건을 잘 λ§Œλ“€μ–΄ μ£ΌλŠ”κ²ƒμ΄ μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜λŠ”λ° 이진 트리 순회λ₯Ό μœ„ν•œ DFS μž¬κ·€ ν˜ΈμΆœμ„ νƒˆμΆœν•˜λŠ” 쑰건이 κΉŒλ‹€λ‘­μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— DFS κ΅¬ν˜„ μžμ²΄κ°€ μ–΄λ €μš΄κ²ƒ κ°™μ§€λŠ” μ•Šλ‹€.(μ•„ λ¬Όλ‘ ,, λ‚΄κ°€ 이전에 μž‘μ„±ν•΄ λ†“μ•˜λ˜ DFS λ‘œμ§μ„ μ°Έκ³ ν•˜κ³  κ΅¬ν˜„ν•˜κΈ°λŠ” ν–ˆλ‹€.)

 

2022.08.16 - [πŸ“š Language & CS knowledge/Algorithm & Data structure] - 17 트리 순회

 

17 트리 순회

17.1 트리 순회 트리 μˆœνšŒλŠ” 말 κ·ΈλŒ€λ‘œ μ–΄λ–€ νŠΈλ¦¬μ—μ„œλ“ μ§€ μ‚¬μš©ν•  수 μžˆλŠ” κ°œλ…μ΄λ‹€. 예λ₯Ό λ“€μ–΄ 이진 탐색 νŠΈλ¦¬λ“ μ§€, κ·Έλƒ₯ 이진 νŠΈλ¦¬λ“ μ§€ κ·Έ μ™Έμ˜ μ–΄λ–€ νŠΈλ¦¬λ“€μ—λ„ λ‹€ μ‚¬μš©μ΄ κ°€λŠ₯ν•œ 순회 방법이

pinetree93.tistory.com

 

클래슀둜 μ΄μ§„νŠΈλ¦¬λ₯Ό κ΅¬ν˜„ν•œ 경우
//클래슀둜 μ΄μ§„νŠΈλ¦¬λ₯Ό κ΅¬ν˜„ν•œ 경우
class Node {
    constructor(value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

class BinaryTree {
    constructor(value) {
        this.root = new Node(value);
    }

    preOrder() { // μ „μœ„ 순회
        let result = [];
        
        function traverse(node) {
            result.push(node.value);
            if(node.left) traverse(node.left);
            if(node.right)traverse(node.right);
        }
        traverse(this.root);
        
        return result;
    }

    inOrder() { // μ€‘μœ„ 순회
        let result = [];
        
        function traverse(node) {
            if(node.left) traverse(node.left);
            result.push(node.value);
            if(node.right)traverse(node.right);
        }
        traverse(this.root);
        
        return result;
    }

    postOrder() { // ν›„μœ„ 순회
        let result = [];
        
        function traverse(node) {
            if(node.left) traverse(node.left);
            if(node.right)traverse(node.right);
            result.push(node.value);
        }
        traverse(this.root);
        
        return result;
    }
}

let tree = new BinaryTree(1);
tree.root.left = new Node(3);
tree.root.right = new Node(5);
tree.root.left.left = new Node(7);
tree.root.left.right = new Node(9);
tree.root.right.left = new Node(11);
console.log(tree.preOrder()); // [1, 3, 7, 9, 5, 11]
console.log(tree.inOrder()); // [7, 3, 9, 1, 11, 5]
console.log(tree.postOrder()); // [7, 9, 3, 11, 5, 1]

 

λ°°μ—΄λ‘œ 이진 트리λ₯Ό κ΅¬ν˜„ν•œ 경우
이진 트리의 κ²½μš°μ—λŠ” λΆ€λͺ¨ λ…Έλ“œλŠ” μžμ‹ λ…Έλ“œλ₯Ό μ΅œλŒ€ 2κ°œκ°€μ§€ κ°–κΈ° λ•Œλ¬Έμ— μˆ˜ν•™μ  κ·œμΉ™μ„ μ΄μš©ν•˜μ—¬ λ°°μ—΄λ‘œ 이진 트리λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.
let leftChildNode = parentNodeIndex * 2;
let rightChildNode = parentNodeIndex * 2 + 1;
let parentNode = parseInt(childNodeIndex / 2);
//λ°°μ—΄λ‘œ μ΄μ§„νŠΈλ¦¬λ₯Ό κ΅¬ν˜„ν•œ 경우
let pineTree = [undefined,9,3,8,2,5,undefined,7,undefined,undefined,undefined, 4];

function preOrder(binaryTree) { // μ „μœ„ 순회
    let result = [];
    function traverse(level) {
        result.push(binaryTree[level]);
        if(binaryTree[level * 2]) traverse(level * 2);
        if(binaryTree[level * 2 + 1]) traverse(level * 2 + 1);
    }
    traverse(1)

    return result;
}

console.log(preOrder(pineTree));

function inOrder(binaryTree) { // μ€‘μœ„ 순회
    let result = [];
    function traverse(level){
        if(binaryTree[level * 2]) traverse(level * 2);
        result.push(binaryTree[level]);
        if(binaryTree[level * 2 + 1]) traverse(level * 2 + 1);
    }
    traverse(1)

    return result;
}

console.log(inOrder(pineTree));

function postOrder(binaryTree) { // ν›„μœ„ 순회
    let result = [];
    function traverse(level) {
        if(binaryTree[level * 2]) traverse(level * 2);
        if(binaryTree[level * 2 + 1]) traverse(level * 2 + 1);
        result.push(binaryTree[level]);
    }
    traverse(1)

    return result;
}

console.log(postOrder(pineTree));

https://github.com/WooDaeHyun/Dev_course-first-assignment.git

 

GitHub - WooDaeHyun/Dev_course-first-assignment

Contribute to WooDaeHyun/Dev_course-first-assignment development by creating an account on GitHub.

github.com