ID | Title | Difficulty | |
---|---|---|---|
Loading... |
255. Verify Preorder Sequence in Binary Search Tree
Medium
LeetCode
Stack, Tree, Binary Search Tree, Recursion, Monotonic Stack, Binary Tree
Problem
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.
You may assume each number in the sequence is unique.
Consider the following binary search tree:
5
/ \
2 6
/ \
1 3
Example 1:
Input: [5,2,6,1,3]
Output: false
Example 2:
Input: [5,2,1,3,6]
Output: true
Code
class Solution {
public boolean verifyPreorder(int[] preorder) {
if(preorder == null || preorder.length == 0) return true;
Stack<Integer> s = new Stack<>();
int min = Integer.MIN_VALUE;
for(int num : preorder) {
if(num < min){
return false;
}
while(!s.isEmpty() && s.peek() < num) {
min = s.pop();
}
s.push(num);
}
return true;
}
}
class Solution:
def verifyPreorder(self, preorder: List[int]) -> bool:
stack = []
min = float("-inf")
for num in preorder:
# 当前的min是之后点的最小值,所以不能出现num < min
if num < min:
return False
# 如果num < stack.peek()说明当前还在左子树
# 当num > stack.peek()时,说明已经到了右子树了
# 此时需要找到当前点是哪个点的右子树,并且修改min,同时pop出stack中的值
while len(stack) != 0 and num > stack[-1]:
min = stack.pop()
stack.append(num)
return True
按 <- 键看上一题!
254. Factor Combinations
按 -> 键看下一题!
256. Paint House