코딩테스트 전, 툭 치면 툭 나와야할만한 코드 스니펫들 모음.
이진트리 클래스
public class Node {
private Node left;
private Node right;
private int value;
public Node(Node left, Node right, int value){
this.left = left;
this.right = right;
this.value = value;
}
public Node getLeft(){
return left;
}
public Node getRight(){
return right;
}
public Node getValue(){
return value;
}
}
이진트리 DFS - preorder traversal(종주)
(inorder, postorder는 방문 순서만 바꿈)
void preorderTraversal(Node root){
if(root == null) return;
root.printValue();
preorderTraversal(root.getLeft());
preorderTraversal(root.getRight());
}
이진트리 높이 구하기
public static int treeHeight(Node n){
if(n == null){
return 0;
}
currHeight = 1 + Math.max(treeHeight(n.getLeft()), treeHeight(n.getRight());
return currHeight;
}
이진트리 BFS
LeetCode Sample Questions
366. Find Leaves of Binary Tree
(medium)
트리 높이 구하기 입문/전형같은 문제
# 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
from collections import defaultdict
class Solution:
def findLeaves(self, root: Optional[TreeNode]) -> List[List[int]]:
result_dic = collections.defaultdict(list)
result_list = []
def getHeight(root):
if root is None:
return 0
height = 1 + max(getHeight(root.left), getHeight(root.right))
result_dic[height].append(root.val)
return height
getHeight(root)
for i in range(1, len(result_dic) + 1):
result_list.append(result_dic[i])
return result_list
- time complexity:
DFS tree traverse에 O(N)
dict에서 list로 정렬하는데 O(tree height)
결국 O(N)인데 dict 대신 바로 list로 넣으면 time/space에서 더 최적화가 가능할 것. - space complexity
dict, list 각각 O(N)
반응형
'Software Engineering' 카테고리의 다른 글
[알고리즘] 이진 검색 binary search (0) | 2022.11.27 |
---|---|
[알고리즘] 이진검색트리 BST(binary search tree) (0) | 2022.11.25 |
실리콘밸리 개발자 연봉을 알아보자 (페이스북,아마존,구글,마이크로소프트,구글코리아) (0) | 2022.08.27 |
[파이썬] 안티패턴/팁 모음 (0) | 2022.04.05 |
데이터분석가 vs 데이터엔지니어 vs 데이터과학자 차이가 뭘까? (3) 연봉과 보상 (0) | 2021.11.08 |