【剑指Offer】二叉搜索树的后序遍历序列
来源:互联网 发布:南京大学cssci数据库 编辑:程序博客网 时间:2024/05/21 15:51
问题描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
背景知识:
二叉搜索树(Binary Search Tree),又叫二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
算法描述:
将数列分为三段,最后一段是最后一个数,也是树的根;第一段小于根,第二段大于根:
| 小于根 | 大于根 | 根 |
然后小于根和大于根这两段又都是树,就可以递归求解了。
当树的大小为0或1时,返回true。
代码:
classSolution {public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size() == 0) { return false; } returnVerify(sequence); } bool Verify(vector<int> sequence) { intsize = sequence.size(); if(size <= 1) { return true; } //开始切割数列 vector<int> smaller; //第一段,比root小 vector<int> larger; //第二段,比root大 //根的值 introot = sequence[size - 1]; //判断此时是否还在第一段,若已经在第二段,但又回到了第一段 //则返回false bool isOne = false; //如果第一个数小于root,则表明有第一段,isOne为true if(sequence[0] < root) { isOne = true; } for(inti = 0; i < size - 1; i++) { //比根小 if(sequence[i] < root) { if(isOne == false) { returnfalse; } smaller.push_back(sequence[i]); } //比根大 else{ if(isOne) isOne = false; larger.push_back(sequence[i]); } } returnVerify(smaller) && Verify(larger); }};
总结:
应该多弄点测试用例,自己测试完后,再提交
1 0
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- ANT中的SSHEXEC和SCP任务用法
- Docker 构建redis镜像
- Docker 构建Tomcat镜像
- MySQL存储过程和函数的区别
- Ember.js 入门指南——{{link-to}} 助手
- 【剑指Offer】二叉搜索树的后序遍历序列
- JNI详解以及使用Java调c代码
- 【工具】工作中常用到的工具
- Android内存后台进程管理内存阀值minfree修改
- 【剑指Offer】二叉树中和为某一值的路径
- PopupWindow的使用
- ubuntu 安装tengine
- Leetcode Best Time to Buy and Sell Stock
- Widget的使用