깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • 점화식(Recurrence Relation)
  • Trie
  • tree
  • 프로그래머스
  • Backtracking(백트래킹)
  • 자료 구조
  • POST / GET 요청
  • 코딩테스트 연습문제
  • Til
  • 시간 복잡도
  • DFS(깊이우선탐색)
  • Leetcode
  • Inorder Traversal(중위 순회)
  • TIT (Today I Troubleshot)
  • 자바스크립트 기초 문법
  • BST(이진 탐색 트리)
  • 최소 힙(Min Heap)
  • Binary Tree(이진 트리)
  • TypeScript
  • 01. 미니 프로젝트
  • Preorder Traversal(전위 순회)
  • leetcode-cli
  • 자잘한 에러 해결
  • 최대 힙(Max Heap)
  • BFS(너비우선탐색)
  • 재귀 함수
  • 팀 프로젝트
  • 혼자 공부하는 자바스크립트
  • Linked List
  • 트러블 슈팅 Troubleshooting
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

9/12 (화) 재귀를 스스로 풀다 TIL

2023. 9. 12. 21:13

공부한 것

  • LeetCode #1448. Count Good Nodes in Binary Tree
    LeetCode - The World's Leading Online Programming Learning Platform
    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
    https://leetcode.com/problems/count-good-nodes-in-binary-tree/

    ⇒ 어제에 이어서 스스로 풀어본 해답이 통했다! (스택을 이용한 해답은 다른 사람들의 해답을 참고함.) 재귀를 이용한 DFS도, 스택을 이용한 DFS도 이제 조금 홀로서기할 수 있을 것 같다.

    1. 재귀를 이용한 DFS:
      function solution1(root: TreeNode | null): number {
      	// 현재 노드 포함 모든 자식 노드 중 '착한' 노드 개수를 반환한다. 
      	function count(node: TreeNode | null, maxVal: number): number {
      		// 탈출 조건(Base condition): 현재 노드가 null이면 0을 반환한다. (=> 잎 노드는 양쪽 자식으로부터 0과 0을 반환받게 된다)
      		if (!node) return 0;
      
      		// 1) 자기 자신 노드가 '착한'노드인지 여부(+1 혹은 +0) 더하기
      		// 2) 왼쪽 자식 트리의 '착한'노드 누적 개수 더하기
      		// 3) 오른쪽 자식 트리의 '착한'노드 누적 개수를 더하여 반환한다.
      		return +(node.val >= maxVal) +
      		// return (node.val >= maxVal ? 1 : 0) +
      			count(node.left, Math.max(maxVal, node.val)) +
      			count(node.right, Math.max(maxVal, node.val));
      	}
      
      	return count(root, root.val);
      }
    1. 스택을 이용한 DFS:
      // 다른 해답: 스택에 최고값도 같이 저장해서 넘겨주는 방식으로 순회(iterative)함.
      function solution3(root: TreeNode | null): number {
      	const stack: Array<[TreeNode, number]> = [[root, root.val]];
      	let count:number = 0;
      
      	while (stack.length) {
      		const [node, currentMax] = stack.pop();
      		count += (node.val >= currentMax ? 1 : 0);
      
      		for (let child of [node.left, node.right]) {
      			if (child) {
      				stack.push([child, Math.max(node.val, currentMax)]);
      			}
      		}
      		// if (node.left) stack.push([node.left, Math.max(node.val, currentMax)]);
      		// if (node.right) stack.push([node.right, Math.max(node.val, currentMax)]);
      	}
      
      	return count;
      }


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 9/14 (목) Jest에서 모킹(Mocking)하는 3가지 방법 **_+ VS Code에 컬러풀 주석 세팅하기_** TIL
    • 9/13 (수) BFS를 이용한 한 문제 풀이와 바뀐 LeetCode 레이아웃 TIL
    • 9/11 (월) 트리 심화 TIL
    • 9/8 (금) 이진 탐색 트리(BST)인지 검증하라 TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바