diff --git a/binary-tree-maximum-path-sum/jdalma.kt b/binary-tree-maximum-path-sum/jdalma.kt new file mode 100644 index 000000000..da537bceb --- /dev/null +++ b/binary-tree-maximum-path-sum/jdalma.kt @@ -0,0 +1,35 @@ +package leetcode_study + +import io.kotest.matchers.shouldBe +import org.junit.jupiter.api.Test +import kotlin.math.max + +class `binary-tree-maximum-path-sum` { + + /** + * TC: O(n), SC: O(log n) + */ + fun maxPathSum(root: TreeNode?): Int { + if (root == null) return 0 + var max = root.`val` // 부모 노드와 2개의 자식 노드의 합을 전역 변수로 갱신한다. + + fun dfs(node: TreeNode?): Int { + if (node == null) return 0 + + val left = max(dfs(node.left), 0) + val right = max(dfs(node.right), 0) + + max = max(node.`val` + left + right, max) + return node.`val` + max(left, right) // 현재 노드와 2개의 자식 노드 중 최대의 값을 반환한다. + } + + dfs(root) + return max + } + + @Test + fun `이진 트리의 최대 경로 합을 반환한다`() { + maxPathSum(TreeNode.of(-10,9,20,null,null,15,7)) shouldBe 42 + maxPathSum(TreeNode.of(1,9,20,null,null,15,7)) shouldBe 45 + } +}