[leetcode 98] Validate Binary Search Tree
98. Validate Binary Search Tree
https://leetcode.com/problems/binary-tree-inorder-traversal/
해결 과정
처음엔 예시만 보고, 왼쪽 노드 값 < 루트 노드 값 < 오른쪽 노드 값 이 맞는지 검사하는 문제로 이해하고 풀었는데
fail 이 난 케이스 [5,4,6,null,null,3,7]을 보니 오른쪽 서브 트리 노드 중 하나인 3이 루트 노드 5보다 작았을 때에도 false인 문제였다.
문제를 풀기 위해서는 해당 서브트리에서 가질 수 있는 최솟값
(오른쪽 서브트리를 위한) 과 최댓값
(왼쪽 서브트리를 위한) 을 파람으로 갖는 추가 메소드가 필요했다.
재귀로 풀었고, 탈출 조건은 1) 노드가 null
일 때 그리고 2) 노드 값 <= min
, 3) 노드 값 >= max
일 때 이다.
코드
fun isValidBST(root: TreeNode?): Boolean {
return checkValidBST(root, null, null)
}
private fun checkValidBST(root: TreeNode?, min: Int?, max: Int?) : Boolean {
if(null == root) return true
if(null != min && min >= root.`val`) return false
if(null != max && max <= root.`val`) return false
val leftResult = checkValidBST(root.left, min, root.`val`)
val rightResult = checkValidBST(root.right, root.`val`, max)
return leftResult && rightResult
}
배운 점
BST
왼쪽 서브트리(left subtree) 노드들 < 루트(root) 노드 < 오른쪽 서브트리(right subtree) 노드들
Leave a comment