티스토리 뷰
728x90
반응형
문제 요약
- 알고리즘 분류: Tree, BFS, BST
- 난이도: Medium
- 문제내용:
- 원래 BST의 모든 키가 자신보다 큰 키들의 합과 원래 키를 더한 값으로 변경되도록 하세요.
- 사이트 주소: https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/description/
문제풀이
문제의 트리 구조는 아래와 같다.
- 노드의 왼쪽 서브트리는 노드의 키보다 작은 키를 가진 노드들로만 이루어져 있어야 합니다.
- 노드의 오른쪽 서브트리는 노드의 키보다 큰 키를 가진 노드들로만 이루어져 있어야 합니다.
- 왼쪽 및 오른쪽 서브트리 또한 이진 탐색 트리여야 합니다.
이번 문제에서는 트리의 탐색하면서 더하는 식으로 진행 하면된다.
트리와 DFS 관한 내용은 아래 글에서 확인 해보면 된다.
이번 문제에서는 preOrder, InOrder, PostOrder관한 순서가 아니라 Right → Root → Left 순으로 탐색하면된다.
기존 트리탐색 알면 Right → Root → Left 순으로 탐색하는것 구현은 어렵지 않다.
구현은 아래코드를 보면 된다.
Python
def treeOrder(node: TreeNode):
global stackValue
if(node.right):
treeOrder(node.right)
stackValue += node.val
node.val = stackValue
if(node.left):
treeOrder(node.left)
Java
public void treeOrder(TreeNode node){
if(node.right != null){
treeOrder(node.right);
}
stackValue += node.val;
node.val = stackValue;
if(node.left != null){
treeOrder(node.left);
}
}
Code
Python
class Solution:
def bstToGst(self, root: TreeNode) -> TreeNode:
global stackValue
stackValue = 0
def treeOrder(node: TreeNode):
global stackValue
if(node.right):
treeOrder(node.right)
stackValue += node.val
node.val = stackValue
if(node.left):
treeOrder(node.left)
treeOrder(root)
return root
Java
class Solution {
int stackValue;
public TreeNode bstToGst(TreeNode root) {
this.stackValue = 0;
treeOrder(root);
return root;
}
public void treeOrder(TreeNode node){
if(node.right != null){
treeOrder(node.right);
}
this.stackValue += node.val;
node.val = this.stackValue;
if(node.left != null){
treeOrder(node.left);
}
}
}
728x90
반응형
'알고리즘 > Leetcode' 카테고리의 다른 글
[Leetcode]2181. Merge Nodes in Between Zeros (0) | 2024.08.30 |
---|---|
[Leetcode]983. Minimum Cost For Tickets (0) | 2024.08.20 |
[Leetcode]935. Knight Dialer (0) | 2024.08.14 |
[Leetcode]3211. Generate Binary Strings Without Adjacent Zeros (0) | 2024.08.11 |
[Leetcode]2130. Maximum Twin Sum of a Linked List (0) | 2024.08.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 자바
- 구현
- BFS
- java
- 그리디
- Python
- Programmerse
- 이론
- 누적합
- 문자열
- DFS
- 알고리즘
- BaekJoon
- level2
- 백준
- 동적 계획법
- spring-boot
- JSCODE
- Greedy
- LeetCode
- 동적계획법
- 파이썬
- 조합
- 배열
- 백트레킹
- 수학
- 그래프
- 재귀호출
- 넓이 우선 탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함