[LeetCode] 654. Maximum Binary Tree
Updated:
654. Maximum Binary Tree
์ฃผ์ด์ง ์กฐ๊ฑด๋๋ก ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค.
- ๋ฃจํธ๋ ธ๋๋ ํด๋น ๋ฐฐ์ด์ Max ๊ฐ์ ๊ฐ์ง๋ค.
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ฐฐ์ด์ Max ๊ฐ ๊ธฐ์ค ์ผ์ชฝ ๋ฐฐ์ด๋ค๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ฐฐ์ด์ Max ๊ฐ ๊ธฐ์ค ์ค๋ฅธ์ชฝ ๋ฐฐ์ด๋ค๋ก ์ด๋ฃจ์ด์ง๋ค.
[3, 2, 1, 6, 0, 5] ๊ฐ ์ฃผ์ด์ง๋ค๋ฉด ๋ฃจํธ๋ ธ๋์ ๊ฐ์ 6 ์ด ๋๊ณ [3, 2, 1] ๋ก ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ [0, 5] ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค.
[3, 2, 1] ๋ก ๋ค์ ๋ฃจํธ๋ ธ๋๋ ๊ฐ์ด 3์ด ๋๊ณ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ์๊ธฐ ๋๋ฌธ์ ์ข ๋ฃ, [2, 1] ๋ก ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค.
๋๋ ์ ์์ ๋ ๊น์ง ๊ณ์ ๋ฐฐ์ด์ ๋๋๋ฉฐ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
from typing import List
# 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
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
root = TreeNode(max(nums))
def make_tree(nums, root):
left_arr = nums[:nums.index(root.val)]
right_arr = nums[nums.index(root.val) + 1:]
if not nums:
return
if len(left_arr) >= 1:
root.left = TreeNode(max(left_arr))
make_tree(left_arr, root.left)
if len(right_arr) >= 1:
root.right = TreeNode(max(right_arr))
make_tree(right_arr, root.right)
make_tree(nums, root)
return root
Leave a comment