面试题33. 二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。

 

参考以下这颗二叉搜索树:

     5
    / \
   2   6
  / \
 1   3
示例 1:

输入: [1,6,3,2,5]
输出: false
示例 2:

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


思路是参考评论区大佬的单调栈 确实非常巧妙

主要思想就是利用二叉排序树所有右子树都比左子树数要大的思想 

    bool verifyPostorder(vector& postorder) {
        stack st;
        int pre = INT_MAX;
        // 倒序遍历数组 实现root -> right -> left的顺序 下面的代码判断何时right -> left
        for(int i = postorder.size() - 1; i >= 0; i--){
            
            if(postorder[i] > pre)return false;
            // 一旦比栈顶元素大 就说明转入了左子树
            while(!st.empty() && postorder[i] < st.top()){

                pre = st.top();
                st.pop();
            }
            st.push(postorder[i]);
        }       
        return true;
        
    }

 

你可能感兴趣的:(c++学习,算法)