判断二叉搜索树后序遍历结果

来源:互联网 发布:js事件源 编辑:程序博客网 时间:2024/06/05 22:41
问题描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。数组为空为NO
思路:
如下图所示,搜索树后序遍历结果满足:最后一位为该树的root,其余数可视为两部分,它的左子树和右子树,并且左子树中所有点均小于root,右子树中所有点均大于root;
如果有出现在左子树中数大于root,或右子树中有比root小的则说明错误 返回NO

递归调用,将下列两部分在进行判断是否满足搜索树后序遍历的条件
   
代码如下:
bool VerifySquenceOfBST(vector<int> sequence) {if (sequence.empty())return false;int left = 0;int right = sequence.size() - 1;return  _verfy(sequence, left, right);}bool _verfy(vector<int> seq, int left, int right){if (left == right)return true;int idx = left;if (seq[left] < seq[right]){while (idx < right){if (seq[idx] < seq[idx + 1])idx++;elsebreak;}if (idx == right)return true;}else{while (idx < right){if (seq[idx] > seq[idx + 1])idx++;elsebreak;}if (idx == right)return true;}////////////////////以上判断数组left到right之间的数是否为有序////////////int tmp = left;int root = right;while (tmp < right){if (seq[tmp]>seq[root])break;tmp++;}int cou = tmp;if (tmp == right)//////右子树为空return _verfy(seq, left, right - 1);while (tmp < right){if (seq[tmp] < seq[root])return false;tmp++;}return _verfy(seq, left, cou - 1) && _verfy(seq, cou, right - 1);}


阅读全文
0 0
原创粉丝点击