Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코틀린기초
- 잇츠디모
- 파이썬 알고리즘
- 파이썬 알고리즘 풀기
- python priority queue
- leetcode 풀기
- 알고리즘풀기
- python 릿코드
- 파이썬 릿코드
- binary search
- python zip_longest
- python xor
- leetcode풀이
- python Leetcode
- python sorted
- 알고리즘풀이
- 릿코드풀이
- 파이썬릿코드풀기
- 파이썬 프로그래머스
- leetcode풀기
- 상가수익률계산기
- 파이썬알고리즘풀기
- 릿코드 파이썬
- python 알고리즘
- 릿코드풀기
- LeetCode
- 릿코드 풀기
- 파이썬알고리즘
- 파이썬릿코드
- 릿코드
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 897. Increasing Order Search Tree 본문
반응형
897. Increasing Order Search Tree
https://leetcode.com/problems/increasing-order-search-tree/
문제)
솔루션1) - inorder traversal, insert
3 steps로 풀이를 접근 하였습니다.
1) 기존 노드르 inorder traversal 수행해서 정렬된 numbers를 리스트 형태로 유지
2) 정렬된 numbers의 첫번째 값(가장 작은 값)으로 새로운 노드를 하나 생성
3) 새로운 노드가 새로운 트리의 root가 되고 해당 루트의 나머지 numbers의 값들은 insert node 처리
# 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 increasingBST(self, root):
if root is None:
return root
# inorder 순회회서 정렬된 val을 리스트 형태 표현
values = deque()
self.inorder(root, values)
# 새로운 노드의 루트를 가장 작은 값으로 노드 생성
new_root = TreeNode(values.popleft())
# 순회해면서 새로운 트리에 insert
for val in values:
self.insert(new_root, val)
return new_root
def inorder(self, node, values):
if node is None:
return
self.inorder(node.left, values)
values.append(node.val)
self.inorder(node.right, values)
def insert(self, node, val):
if node is None:
return TreeNode(val)
if node.val < val:
node.right = self.insert(node.right, val)
elif node.val > val:
node.left = self.insert(node.left, val)
return node
솔루션2)
솔루션1)에서는 재귀적으로 tree를 구성하도록 함수를 만들었습니다.
하지만, 굳이 이렇게 구현할 필요가 없습니다.
이미 정렬된 배열 형태의 number가 있기 때문에 순차적으로 노드를 생성하면서 계속 오른쪽에 자식 노드를 추가하면 됩니다.
# 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 increasingBST(self, root):
if root is None:
return root
# inorder 순회회서 정렬된 val을 리스트 형태 표현
values = deque()
self.inorder(root, values)
new_root = TreeNode(None)
cur = new_root
# 오른쪽에 자식 노드를 계속 추가
for val in values:
cur.right = TreeNode(val)
cur = cur.right
return new_root.right
def inorder(self, node, values):
if node is None:
return
self.inorder(node.left, values)
values.append(node.val)
self.inorder(node.right, values)
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 53. Maximum Subarray (0) | 2021.11.30 |
---|---|
LeetCode 풀기 - 1313. Decompress Run-Length Encoded List (0) | 2021.11.29 |
LeetCode 풀기 - 1315. Sum of Nodes with Even-Valued Grandparent (0) | 2021.11.24 |
LeetCode 풀기 - 938. Range Sum of BST (0) | 2021.11.24 |
LeetCode 풀기 - 450. Delete Node in a BST (0) | 2021.11.24 |
Comments