返回介绍

solution / 0200-0299 / 0255.Verify Preorder Sequence in Binary Search Tree / README

发布于 2024-06-17 01:04:02 字数 2791 浏览 0 评论 0 收藏 0

255. 验证二叉搜索树的前序遍历序列

English Version

题目描述

给定一个 无重复元素 的整数数组 preorder , _如果它是以二叉搜索树的先序遍历排列__ _,返回 true

 

示例 1:

输入: preorder = [5,2,1,3,6]
输出: true

示例 2:

输入: preorder = [5,2,6,1,3]
输出: false

 

提示:

  • 1 <= preorder.length <= 104
  • 1 <= preorder[i] <= 104
  • preorder 中 无重复元素

 

进阶:您能否使用恒定的空间复杂度来完成此题?

解法

方法一

class Solution:
  def verifyPreorder(self, preorder: List[int]) -> bool:
    stk = []
    last = -inf
    for x in preorder:
      if x < last:
        return False
      while stk and stk[-1] < x:
        last = stk.pop()
      stk.append(x)
    return True
class Solution {
  public boolean verifyPreorder(int[] preorder) {
    Deque<Integer> stk = new ArrayDeque<>();
    int last = Integer.MIN_VALUE;
    for (int x : preorder) {
      if (x < last) {
        return false;
      }
      while (!stk.isEmpty() && stk.peek() < x) {
        last = stk.poll();
      }
      stk.push(x);
    }
    return true;
  }
}
class Solution {
public:
  bool verifyPreorder(vector<int>& preorder) {
    stack<int> stk;
    int last = INT_MIN;
    for (int x : preorder) {
      if (x < last) return false;
      while (!stk.empty() && stk.top() < x) {
        last = stk.top();
        stk.pop();
      }
      stk.push(x);
    }
    return true;
  }
};
func verifyPreorder(preorder []int) bool {
  var stk []int
  last := math.MinInt32
  for _, x := range preorder {
    if x < last {
      return false
    }
    for len(stk) > 0 && stk[len(stk)-1] < x {
      last = stk[len(stk)-1]
      stk = stk[0 : len(stk)-1]
    }
    stk = append(stk, x)
  }
  return true
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文