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
- shadowing
- Excel
- sidleup
- Knowledge Distillation
- pulloff
- freebooze
- normalization
- Policy Gradient
- non parametic softmax
- sample rows
- thresholding
- REINFORCE
- fastapi
- noise contrast estimation
- 자료구조
- objective functions for machine learning
- remove outliers
- rest-api
- straightup
- domain adaptation
- MRI
- resample
- checkitout
- scowl
- clip intensity values
- 3d medical image
- Inorder Traversal
- Actor-Critic
- model-free control
- loss functions
Archives
- Today
- Total
Let's Run Jinyeah
[Python] Data Structure - Tree 본문
Tree
그래프 자료구조의 일종으로 데이터베이스 시스템이나 파일 시스템과 같은 곳에서 많은 양의 데이터를 관리하기 위한 목적으로 사용됨
특징
- 트리는 부모 노드와 자식 노드의 관계로 표현된다
- 트리의 최상단 노드를 루트 노드라고 한다
- 트리의 최하단 노드를 단말 노드라고 한다
- 트리에서 일부를 떼어내도 트리 구조이며 이를 서브 트리라 한다
- 트리는 파일 시스템과 같이 계층적이고 정렬된 데이터를 다루기에 적합하다
Binary Tree
Tree that each node has no more than two child nodes. Each node has a left node and a right node
Binary Search Tree
- 중위 순회(Inorder Traversal)를 하면 키 값의 오름차순으로 노드를 얻을 수 있음
- 이진탐색에 유용
- 노드의 삽입이 쉬움
특징 - 왼쪽 자식 노드<부모노드<오른쪽 자식 노드
탐색 구현
(leetcode 993. Cousins in Binary Tree)
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def searchNext(self, root: Optional[TreeNode], x, y, depth, parent: Optional[TreeNode]):
if root == None:
return
if root.val == x:
x_depth = depth
x_parent = parent
elif root.val == y:
y_depth = depth
y_parent = parent
else:
self.searchNext(root.left, x, y, depth+1, root)
self.searchNext(root.right, x, y, depth+1, root)
1. 루트부터 선택해서 검색을 진행한다. 여기서 선택하는 노드를 p라고 한다.
2. p가 널이면 검색에 실패한다.
3. 검색하는 값 key와 선택한 노드 p와의 키값을 비교하여
- 값이 같으면 검색에 성공(검색종료)
- key가 작으면 선택한 노드에 왼쪽 자식 노드를 대입한다.(왼쪽으로 검색 진행)
- key가 크면 선택한 노드에 오른쪽 자식 노드를 대입한다.(오른쪽으로 검색 진행)
4. 2번 과정으로 되돌아간다.
중위 순회(Inorder Traversal) 구현
- 순회순서 Left -> root -> right
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:
def recursiveInorder(self, root, sol):
if root:
self.recursiveInorder(root.left, sol)
sol.append(root.val)
self.recursiveInorder(root.right, sol)
return sol
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
sol = []
if root:
return self.recursiveInorder(root, sol)
if __name__ == "__main__":
root = TreeNode(1)
root.left = None
root.right = TreeNode(2)
root.right.left = TreeNode(3)
sol = Solution()
result = sol.inorderTraversal(root)
print(result)
참고
이것이 취업을 위한 코딩 테스트이다
'Programming > Algorithm' 카테고리의 다른 글
Outer product, Inner product (0) | 2022.10.06 |
---|---|
[Python] list 원소의 모든 조합 구하기 (0) | 2021.11.17 |
[Python] 이진탐색 (0) | 2021.10.19 |
[Python] 정렬 - 선택, 삽입, 퀵 (0) | 2021.10.14 |
[Python] 기본 탐색 - 완전탐색, DFS/BFS (0) | 2021.10.14 |
Comments