剑指offer——二叉搜索树中的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

输入描述:

输入:5 7 6 9 11 10 8

输出:true

C++代码:

class Solution {
public:
//非递归方式
bool VerifySquenceOfBST(vector<int> sequence) {
		int size = sequence.size();
		if (size == 0)return false;

		int i = 0;
		while (--size)
		{
			while (sequence[i++] < sequence[size]);
			while (sequence[i] > sequence[size]){
                if(i>=size) return true;
                i++;
            }
			if (i < size)return false;
			i = 0;
		}
		return true;
	}

//递归方式
bool judge(vector<int>& a, int l, int r) {
		if (l >= r) return true;
		int i = r;
		while (i > l && a[i - 1] > a[r]) --i;
		for (int j = i - 1; j >= l; --j) if (a[j] > a[r]) return false;
		return judge(a, l, i - 1) && (judge(a, i, r - 1));
		}
public:
	bool VerifySquenceOfBST2(vector<int> sequence) {
		if (sequence.empty())return false;
		return judge(sequence, 0, sequence.size() - 1);
	}
};

 

posted @ 2019-04-12 10:23  鲁太师  阅读(82)  评论(0编辑  收藏  举报