- index ํจ์๋ฅผ ์ฌ์ฉํด๋ ๋จ
collections.deque(preorder).popleft()
๋ฅผ ์ฌ์ฉํ์ด์ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฑฐ์์
- ์ด๋ ๋ฐ๋ก ๋ด์ฅ ํจ์๋ฅผ ๋ง๋ค์ด์ deque๋ฅผ ๋์์ฃผ๊ฒ๋ ํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์์
- ์ด ์์ ๊ณ์ ์๋ก์ด deque๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ
Solution
# Definition for a binary tree node.
import collections
from typing import Optional, List
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
# ์ฃผ์ด์ง inorder, preorder ๊ฐ์ผ๋ก ํธ๋ฆฌ ๋ง๋๋ ๋ฌธ์
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
if not inorder:
return None
# preorder ALWAYS has the node first.
# But you don't know the size of either branch.
pre_popleft = preorder.pop(0)
# pre_popleft = collections.deque(preorder).popleft()
# inorder ALWAYS has the left branch to the left of the node
# and right branch to the right of the node.
# So now you know the size of each branch.
index = 0
for x in inorder:
if x == pre_popleft:
break
index += 1
node = TreeNode(inorder[index])
node.left = self.buildTree(preorder, inorder[:index])
node.right = self.buildTree(preorder, inorder[index + 1:])
return node
Reference
Leave a comment