유효한 BST 확인
7927 단어 javascriptleetcode
유효한 BST는 다음과 같이 정의됩니다.
노드의 왼쪽 하위 트리에는 노드의 키보다 작은 키를 가진 노드만 포함됩니다.
노드의 오른쪽 하위 트리에는 노드의 키보다 큰 키가 있는 노드만 포함됩니다.
왼쪽 및 오른쪽 하위 트리도 모두 이진 검색 트리여야 합니다.
예 1:
입력: 루트 = [2,1,3]
출력: 참
접근법 1: 최대 및 최소 범위 두 값 유지
var isValidBST = function (root) {
return validate(root, -Infinity, Infinity);
};
var validate = function (node, lower, upper) {
if (node == null) {
// empty node or empty tree
return true;
}
if (lower < node.val && node.val < upper) {
// check if all tree nodes follow BST rule
return (
validate(node.left, lower, node.val) &&
validate(node.right, node.val, upper)
);
} else {
// early reject when we find violation
return false;
}
};
접근 방식 2: 순서대로 순회 수행 및 정렬된 배열로 배열 검사.
var isValidBST = function (root) {
function inOrder(node) {
if (!node) return [];
return [...inOrder(node.left), node.val, ...inOrder(node.right)];
}
const sortedArr = inOrder(root);
for (let i = 0; i < sortedArr.length; i++) {
if (sortedArr[i + 1] <= sortedArr[i]) return false;
}
return true;
};
접근법 3: InOrder Traversal 수행 및 비교를 수행하기 위해 하나의 Min 포인터 유지
var isValidBST = function (root) {
let previous = -Infinity;
function checkInOrder(root) {
if (root === null) {
return null;
}
if (checkInOrder(root.left) === false) {
return false;
}
if (root.val <= previous) {
return false;
}
previous = root.val;
return checkInOrder(root.right);
}
return checkInOrder(root);
};
Reference
이 문제에 관하여(유효한 BST 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zeeshanali0704/check-for-valid-bst-3ndh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)