본문 바로가기
코테 준비/Stack

[LeetCode] 1008. Construct Binary Search Tree from Preorder Traversal

by 헤이즐넛 좋아하는 개발자 2025. 1. 26.

I. Description


II. Code

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
    # # __repr__ 메서드 추가
    # def __repr__(self):
    #     return f"TreeNode(val={self.val})"
    
class Solution:
    def bstFromPreorder(self, preorder: List[int]) -> Optional[TreeNode]:
        root = TreeNode(preorder[0])
        stack = [root]
        for value in preorder[1:]:
            if value < stack[-1].val:
                stack[-1].left = TreeNode(value)
                stack.append(stack[-1].left)
            else:
                while stack and stack[-1].val < value:
                    last = stack.pop()
                last.right = TreeNode(value)
                stack.append(last.right)
            # print(stack)
        return root

처음 보는 유형의 문제라 많이 헷갈렸다. 패드에 순서대로 그려가면서 이해하는 것 자체가 공부가 되었다.