가수면

이진 검색 트리 구현 본문

CS/CS

이진 검색 트리 구현

니비앙 2023. 5. 27. 22:42

이진 탐색 트리와 이진 힙 비교

  • 힙은 각 노드의 값이 자식 노드보다 크거나 같음(Max Heap의 경우)
  • 이진 탐색 트리는 왼쪽 자식 노드의 값이 가장 작고, 그 다음 부모 노드, 그 다음 오른쪽 자식 노드 값이 가장 큼
  • 힙은 이진 탐색 트리의 조건인 자식 노드에서 작은 값은 왼쪽, 큰 값은 오른쪽이라는 조건은 없음
    • 힙의 왼쪽 및 오른쪽 자식 노드의 값은 오른쪽이 클 수도 있고, 왼쪽이 클 수도 있음

insert 매소드

class Node {
    constructor(value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

class BinarySearchTree {
    constructor() {
        this.root = null;
    }
    insert(value) {
        let newNode = new Node(value);
        if (this.root === null) {
            this.root = newNode;
            return this;
        }
        let current = this.root;
        while (true) {
            if (value === current.value) return undefined;
            if (value < current.value) {
                if (current.left === null) {
                    current.left = newNode;
                    return this;
                }
                current = current.left;
            } else {
                if (current.right === null) {
                    current.right = newNode;
                    return this;
                }
                current = current.right;
            }
        }
    }
}

find 매소드

class Node {
    constructor(value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

class BinarySearchTree {
    constructor() {
        this.root = null;
    }
    insert(value) {
        let newNode = new Node(value);
        if (this.root === null) {
            this.root = newNode;
            return this;
        }
        let current = this.root;
        while (true) {
            if (value === current.value) return undefined;
            if (value < current.value) {
                if (current.left === null) {
                    current.left = newNode;
                    return this;
                }
                current = current.left;
            } else {
                if (current.right === null) {
                    current.right = newNode;
                    return this;
                }
                current = current.right;
            }
        }
    }
    find(value) {
        if (this.root === null) return undefined;
        let current = this.root,
            found = false;
        while (current && !found) {
            if (value < current.value) {
                current = current.left;
            } else if (value > current.value) {
                current = current.right;
            } else {
                found = true;
            }
        }
        if (!found) return undefined;
        return current;
    }
}

 

파이썬 ver.

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None


class Binary_search_tree:
    def __init__(self):
        self.root = None

    def insert(self, insert_value):
        new_node = Node(insert_value)
        if self.root is None:
            self.root = new_node
            return self

        current = self.root
        while True:
            if current.value == insert_value:
                return None
            if current.value > insert_value:
                if current.left is None:
                    current.left = new_node
                    return self
                current = current.left
            else:
                if current.right is None:
                    current.right = new_node
                    return self
                current = current.right

    def find(self, target):
        if self.root is None:
            return None

        current = self.root
        while True:
            if self.root is None:
                return None
            elif current.value > target:
                current = current.left
            elif current.value < target:
                current = current.right
            else:
                return current

'CS > CS' 카테고리의 다른 글

이진 힙 구현  (0) 2023.05.29
트리 순회  (0) 2023.05.28
스택, 큐 구현  (0) 2023.05.26
이중 연결 리스트 구현  (0) 2023.05.25
단일 연결 리스트 구현  (0) 2023.05.23
Comments