root 노드를 중심으로 왼쪽 subtree는 전부 root 노드보다 값이 작아야 하고
오른쪽 subtree는 전부 root 노드보다 값이 커야 한다.
- subtree에 있는 모든 노드가 조건을 만족해야 한다.
- 같아도 안된다.
1) inorder를 이용한 방식-stack 사용
- stack을 사용하여 왼쪽 가장 아래 노드까지 내려간다.
- subtree기준으로 어쨌든 오른쪽 노드가 가장 크면 되기 때문에 값의 크기를 비교한 후엔 현재노드를 right 노드로 설정한다.
using namespace std;
class Solution {
public:
bool isValidBST(TreeNode* root) {
stack<TreeNode*>s;
long long inorder = -LONG_MAX;
while(!s.empty() || root !=nullptr){
while(root != nullptr){
s.push(root);
root = root->left;
}
TreeNode* top = s.top();
s.pop();
if(top -> val <=inorder) return false;
inorder = top->val;
root = top->right;
}
return true;
}
};
'알고리즘 문제풀이 > leetcode' 카테고리의 다른 글
[leetcode 71] Simplify Path (0) | 2020.10.05 |
---|---|
[leetcode 230] Kth Smallest Element in a BST (0) | 2020.10.04 |
[leetcode 94] Binary Tree Inorder Traversal (0) | 2020.10.04 |
[leetcode 102] Binary Tree Level Order Traversal (0) | 2020.10.03 |
[leetcode 993] Cousins in Binary Tree (0) | 2020.10.03 |
댓글