더북(TheBook)

마지막으로 어떤 노드가 주어졌을 때 그 노드의 바로 이전 노드와 바로 다음 노드를 구하는 메서드인 prev()next()를 구현해 보겠습니다. 코드를 먼저 보겠습니다.

코드 8-8

    def prev(self, cur):
        if cur.left:  
            return self.max(cur.left)

        parent = cur.parent 
        while parent and cur == parent.left: 
            cur = parent
            parent = parent.parent

        return parent

    def next(self, cur):
        if cur.right: 
            return self.min(cur.right)

        parent = cur.parent 
        while parent and cur == parent.right:  
            cur = parent
            parent = parent.parent

        return parent

왼쪽 자식이 있다면 왼쪽 자식에서 가장 큰 노드

부모 노드를 받아 옵니다.

현재 노드가 부모 노드의 왼쪽 자식이면

오른쪽 자식이 있다면 오른쪽 자식에서 가장 작은 노드

부모 노드를 받아 옵니다.

현재 노드가 부모 노드의 오른쪽 자식이면 루트에 도달하거나 현재 노드가 부모 노드의 왼쪽 자식이 될 때까지 계속 부모 노드로 이동

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.