// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。

//

  1. #include "stdafx.h"
  2. #include "stdafx.h"
  3. #include<iostream>
  4. #include<vector>
  5. #include<algorithm>
  6. #include<numeric>
  7. #include<list>
  8. #include<iterator>
  9. #include<queue>
  10. #include<stack>
  11. using namespace std;
  12. struct TreeNode {
  13. int val;
  14. struct TreeNode *left;
  15. struct TreeNode *right;
  16. TreeNode(int x) :
  17. val(x), left(NULL), right(NULL) {
  18. }
  19. };
  20. class Solution {
  21. public:
  22. bool VerifySquenceOfBST(vector<int> sequence) {
  23. vector<int> leftSubTree;//存入左孩子
  24. vector<int> rightSubTree;//存入右孩子
  25. int root = 0; //存放根节点的值
  26. int flag = 0;//根据flag的值决定结果存入右孩子还是左孩子
  27. bool result = true;
  28. if (sequence.empty()) return false;//如果sequence为空的时候返回false
  29. root = *(sequence.end() - 1);
  30. for (auto it = sequence.begin(); it != sequence.end()-1; it++) //划分左孩子和右孩子
  31. {
  32. if (*it < root&&flag == 0)
  33. leftSubTree.push_back(*it);
  34. else if (*it > root)
  35. {
  36. flag = 1;
  37. rightSubTree.push_back(*it);
  38. }
  39. else
  40. {
  41. rightSubTree.push_back(*it);
  42. }
  43. }
  44. //根据左孩子和右孩子判断结果,左孩子的所有值都小于根节点,右孩子的所有值都大于根节点
  45. //这里左孩子不用判断,因为上述存储中已经保证
  46. for (auto it = rightSubTree.begin(); it != rightSubTree.end(); ++it)
  47. {
  48. if (*it < root)
  49. {
  50. result = false;
  51. break;
  52. }
  53. }
  54. if (result == false) //第一次检查错误,不在递归,范围false
  55. return false;
  56. if (!rightSubTree.empty()&&!leftSubTree.empty()) //进行下次递归时要判断左子树和右子树是否为空,为空的时候不需要进行递归
  57. result = VerifySquenceOfBST(rightSubTree)&&VerifySquenceOfBST(leftSubTree);
  58. else if(!rightSubTree.empty() && leftSubTree.empty())
  59. result = VerifySquenceOfBST(rightSubTree) ;
  60. else if (rightSubTree.empty() && !leftSubTree.empty())
  61. result = VerifySquenceOfBST(leftSubTree);
  62. else
  63. result = true;
  64. return result;
  65. }
  66. };
  67. int main()
  68. {
  69. Solution so;
  70. vector<int> tree1 = { 5,7, 6, 9, 11, 10, 8 };
  71. vector<int> tree2 = { 7,4,6,5 };
  72. bool result1 = so.VerifySquenceOfBST(tree1);
  73. cout << "tree1结果是:" ;
  74. cout << result1 << endl;
  75. cout << endl;
  76. bool result2 = so.VerifySquenceOfBST(tree2);
  77. cout << "tree2结果是:";
  78. cout << result2 << endl;
  79. cout << endl;
  80. return 0;
  81. }

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。的更多相关文章

  1. 剑指offer23:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。输出Yes OR No。

    1 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 2 思路和方法 二叉搜索树:二叉查找树(Bin ...

  2. 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...

  3. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

  4. 剑指Offer22 判断数组是否为某二叉搜索树的后序遍历

    /************************************************************************* > File Name: 22_Sequen ...

  5. 【剑指offer】判断一个序列是否是二叉搜索树的后序遍历,C++实现

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出N ...

  6. [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现

    二叉搜索树的后序遍历序列: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 1.后序遍历是 左右中 ...

  7. 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在

    剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...

  8. Interview----判断整数序列是否是二叉搜索树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果:   ...

  9. 剑指offer24:判断一个二叉树的后序遍历序列是否为二叉搜索树的后序遍历序列

    public static boolean isBSTSequence(int[] s,int l, int r) { if (s == null || r <= 0) return false ...

随机推荐

  1. SERVER 2012 R2 core域环境下批量创建用户

      Write by xiaoyang 转载请注明出处 步骤一:创建域 基本配置 1.         输入命令进入配置 2.         输入8进入网络配置 3.         选择要配置的网 ...

  2. byte[] 清空

    1. using(byte buff = new byte[Size]){  // 你要用的代码,} 2. Array.Clear(bytes, 0 ,bytes.Length);

  3. Objective-C排序算法实现

    算法作为程序猿的一种基本技能,对我来说却一直是一个硬伤.毕竟平时的工作接触算法的地方很少,大部分时间都是在搭建UI,写业务逻辑,写网络请求.然而在面试当中,算法往往又是考察的重点. 也许你会说这些平时 ...

  4. 利用CSS3打造一组质感细腻丝滑的按钮

    CSS3引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果.下面这些发出闪亮光泽的按钮,漂亮吧?把鼠标悬停在按钮上,还有动感的光泽移动效果. 温馨提示:为保证最佳的效果, ...

  5. Linux相关指令

    Linux相关指令 1.find文件搜索功能 find [目录列表] [匹配参数] [匹配标准] -name :按文件名称进行搜索 -group :按文件所属组进行搜索 -user :按文件拥有者进行 ...

  6. python 实现梯度下降

    在多元线性回归中会用到梯度下降来计算参数值.这里我用python实现一个梯度下降版本. 这里多元线性方程为 y = A0+A1*x1+...+An* xn 数据输入格式,y表示 y \t x1 \t ...

  7. Google面试题:计算从1到n的正数中1出现的次数

    题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 找工作,准备看写题目,题目说是Goo ...

  8. java8个基本类型和它们所占的字节数

    byte : 1字节 short : 2字节 int : 4字节 float :4字节 long : 8字节 double : 8字节 char :2字节 boolean : 1字节 补充说明:在实际 ...

  9. 【风马一族_Python】 更替pip的版本

    替换电脑上python中的pip的版本 例子: 下载的文件:pip-8.1.1-py2.py3-none-any.whl 下载地址:https://pypi.python.org/pypi/pip/# ...

  10. ARM公布“物联网”嵌入式mbed OS系统软件平台

    继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗“物联网”设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于ARM现有Cortex- ...