二叉搜索树的后序遍历序列(递归与非递归)
来源:互联网 发布:华育软件学院 编辑:程序博客网 时间:2024/05/30 07:12
题目:输入一个整数数组,判断该整数是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都不相同。 解析:例如输入的数组{5,7,6,9,11,10,8}。则返回true。如果输入的数组是{7,4,6,5},则返回的是false。 方法一:递归思想,数组中的最后一个元素把数组分成两部分,左半部分数字都小于最后一个元素,右半部分数字都大于最后一个元素。然后递归的进入到左半部分和右半部分,当左右两部分的都是二叉搜索树的后序遍历序列时,才返回true。//判断当前序列是不是二叉搜索树的后序遍历序列bool verify(vector<int> &arr, int start, int last){//叶子节点,返回trueif (start == last)return true;int i = start;for (; i < last; ++i){if (arr[i] > arr[last])break;}//i必须在start到last之间if (i > start && i < last){bool left = verify(arr, start, i - 1);bool right = verify(arr, i, last - 1);}//如果右半部分不是二叉搜索树,则返回falsefor (int j = i; j < last; ++j){if (arr[j] < arr[last])return false;}return left && right;}bool verifySequenceOfBST(vector<int> arr){if (arr.empty())return false;return verify(arr, 0, arr.size() - 1);}方法二:非递归思想。从数组的最后开始遍历,每遍历一个元素,查看当前元素之前的序列是不是二叉搜索树的后序遍历序列,如果不是,直接返回false。如果遍历到数组的首元素都满足二叉搜索树的后序遍历序列,则返回true。bool verify(vector<int> arr){if (arr.empty())return false;int size = arr.size();while (--size){int i = 0;for (; i < size; ++i){if (arr[i] > arr[size])break;}for (; i < size; ++i){if (arr[i] < arr[size])return false;}}return true;}
0 0
- 二叉搜索树的后序遍历序列(递归与非递归)
- 二叉搜索树非递归后序遍历的尝试
- 二叉树的前序、中序、后序遍历(递归与非递归)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 数据结构BinaryTree实例(三):二叉树的后序遍历(递归与非递归)
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 二叉树的后序递归,非递归遍历
- 二叉树非递归后序遍历(非递归遍历中最麻烦的一个)
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 剑指offer_面试题24_二叉搜索树的后序遍历序列(递归)
- 二叉树的后序遍历(非递归)
- 二叉树的遍历(后序)-非递归实现
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 二叉搜索树的递归遍历和非递归遍历
- 长度为n的整形数组,找出其中的任意n-1个数乘积最大的那一组
- 携程2016春招
- 看门狗电路
- 支付宝Pay,一个类直接搞定
- C++ vector讲解
- 二叉搜索树的后序遍历序列(递归与非递归)
- js所有对象都有的属性和方法
- JavaScript Source Map 详解
- bootstrap-table的一些配置参数例子
- OpenGL渲染管线
- 初探极光推送(一)
- Oracle--执行计划详解
- Android studio 查看修改代码历史记录
- android--显式跳转和隐式跳转