zoukankan      html  css  js  c++  java
  • [Locked] Verify Preorder Sequence in Binary Search Tree

    Verify Preorder Sequence in Binary Search Tree
    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.
    Follow up:
    Could you do it using only constant space complexity?
    分析:
      举个例子,5 2 1 3 4 7 6 8。前序遍历,访问顺序是:parent --> left --> right;而要保证这是一个二分搜索树,那么这棵树的每个子树节点从小到大顺序是:left < parent < right;我们发现一旦n(i+1)比n(i)大,那么它必定是之前某个parent的right child,则可以将该parent代表子树用right child压缩表示,即right child取代parent及其left child子树成为新的子树根节点。如果之后来了一个新节点值还比被取代的parent值小的话,return false;如果处理完所有的数,则return true。
    解法一:
      如果不考虑O(1)空间复杂度这个条件的话,用stack可实现压缩临近节点的步骤;
    代码一:
    bool preorder(vector<int> nums) {
        stack<int> stk;
        int curp = INT_MIN;
        if(nums.empty())
            return true;
        stk.push(nums[0]);
        for(int i = 1; i < nums.size(); i++) {
            if(nums[i] < curp)
                return false;
            while(!stk.empty() && stk.top() < nums[i]) {
                curp = stk.top();
                stk.pop();
            }
            stk.push(nums[i]);
        }
        return true;
    }
    解法二:
      如果考虑O(1)空间复杂度这个条件,用递归其实不能算是O(1)空间复杂度的,我们可以修改解法一,用原数组来实现stack;
     
  • 相关阅读:
    虫食算(暴力搜索)
    P3909 异或之积
    P1171 售货员的难题 暴力dp
    P2657 [SCOI2009]windy数
    【luogu P1726 上白泽慧音】 题解
    【luogu P2146 [NOI2015]软件包管理器】 题解
    莫队算法~讲解【更新】
    【luogu P1113 杂务】 题解
    【luogu P1268 树的重量】 题解
    【luogu P4114 Qtree1】 题解
  • 原文地址:https://www.cnblogs.com/littletail/p/5208060.html
Copyright © 2011-2022 走看看