输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
2014-07-20 15:34
288 查看
这里假设数列中没有重复元素。根据二叉搜索树的特点,左子树所有节点值小于根节点,右子树所有节点值大于根节点。在后序遍历序列中,最后一个元素对应二叉搜索树根节点,我们从数组左边找到第一个比根节点大的元素,看这个元素右边(除过最后一个元素)值是否都比根节点值大,若不是,则表明这个不是一个有效的后序序列,返回false。程序可以用递归实现如下:(测试样例结果分别为true, false)
#include <iostream> #include <queue> using namespace std; struct BiTreeNode{ int val; BiTreeNode* leftChild; BiTreeNode* rightChild; }; bool VerifySequence(int *arr, int length){ if (arr == NULL || length <= 0) return false; int rootVal = arr[length - 1]; int pos = 0; for (; pos < length - 1; ++pos){ if (arr[pos] > rootVal) break; } for (int i = pos; i < length - 1; ++i){ if (arr[i] < rootVal) return false; } bool left = true, right = true; if (pos > 0){ left = VerifySequence(arr, pos); } if (pos < length - 1){ right = VerifySequence(arr + pos, length - 1 - pos); } return left && right; } void main(int argc, char* argv[]) { int arr1[] {5, 7, 6, 9, 11, 10, 8}; int arr2[] {7, 4, 6, 5}; cout << VerifySequence(arr1, 7); cout << VerifySequence(arr2, 4); system("pause"); }
相关文章推荐
- 剑指offer解题报告(Java版)——判断一个数组是否是二叉搜索树的后序遍历序列 24
- 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- 剑指offer_输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- 【剑指offer24】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- java 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- Java实现:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
- 《剑指Offer》输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- java实现输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- 判断一个数列是否是二叉树后序遍历的结果
- 判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
- 【面试题】剑指offer24--判断一个序列是否为二叉树的后序遍历
- 判断一个序列是否为某二叉搜索树的后续遍历结果
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现