题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);
	}
};  

京公网安备 11010502036488号