剑指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);
	}
};

 

全部评论

相关推荐

rndguy:个人思路,抛砖引玉。 要我的话我先问清楚需求:要什么精度,什么速度,什么环境。 如果精度要求很低,平台也有点柔性的话,只需要输出pwm,然后开个中断记录各多少个脉冲,如果脉冲时间不对齐了就反馈控制电流加减就行。要求同步要求稍微高点的话可以在脉冲间做个线性插值,同步精度会高些。 但总体来说,如果直流有刷只有脉冲没有好的编码器的话很难做精准定位什么的(除非用一些电机磁路结构相关的奇技淫巧如高频注入什么的),所以要求更高就需要大量参数辨识和校准,那就慢多了。
点赞 评论 收藏
分享
未知的命运:大佬这都找不到我还找啥啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务