剑指offer面试题之判断二叉搜索树的后序序列
来源:互联网 发布:nginx和zookeeper 编辑:程序博客网 时间:2024/06/05 11:56
1,问题:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
2,想法:
后序序列的最后一个结点为根节点,根节点的左孩子树都比它小,右孩子树都比它大,所以可以根据最后一个结点把序列分成两个部分,分成两个部分后又可以继续递归判断。而递归的出口是,当递归到序列中只有一个孩子时,返回true,当当前根节点不能把当前序列分成两个部分时,就返回false。
3,编码:
class Solution {public: bool isBST(vector<int> s, int start, int end) { if (start == end)//序列只有一个孩子时 { return true; } int i; //下边两个for循环既可以判断当前的根能否完整的把序列分成两个左右孩子序列 //从而判断是否是后序序列 //又能找到下层递归的起始位置 for (i = start; i < end;) { if (s[i] < s[end]) i++; else break; } for (i; i < end;) { if (s[i] > s[end]) i++; else break; } if (i < end)//这里判断是否在找到第一个大于根的节点后,序列中又有小于根的节点 { //若有则i不回增加到end,就不是一个后序序列 return false; } if (i - start == 0)//说明当前后序序列代表的树没有左孩子 { return isBST(s, start, end - 1); } else if (i == end)//表示没有右孩子 { return isBST(s, start, end - 1); } else { return isBST(s, start, i - 1) && isBST(s, i, end - 1); } } bool VerifySquenceOfBST(vector<int> sequence) { if (sequence.empty()) { return false; } return isBST(sequence, 0, sequence.size() - 1); }};
1 0
- 剑指offer面试题之判断二叉搜索树的后序序列
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 剑指Offer之面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
- [剑指offer][面试题24]二叉搜索树的后序遍历序列
- 【剑指offer】面试题24:二叉搜索树的后序遍历序列
- 剑指Offer:面试题24 二叉搜索树的后序遍历序列
- 《剑指Offer》面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24—二叉搜索树的后序遍历序列
- 剑指offer--面试题24:二叉搜索树的后序遍历序列--Java实现
- 【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】
- 【剑指Offer面试题】 九度OJ1367:二叉搜索树的后序遍历序列
- 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指offer-面试题24.二叉搜索树的后序遍历序列
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- GDB 进行调试 使用心得
- 基于IAP15F2K61S2的带文件系统的微型操作系统
- Java 实现从数组删除指定位置元素
- Git忽略规则及.gitignore规则不生效的解决办法
- 使用 rplidar测试hector_mapping
- 剑指offer面试题之判断二叉搜索树的后序序列
- Sublime Text3安装 + 破解码(最新) + 插件
- Android学习之Design Support Library中TextInputLayout的使用
- IOS学习之——通讯录的应用
- Log4j的使用
- hdoj 幸福列车 1434 (模拟&队列)
- leetcode---String to Integer (atoi)
- 如何将一个 android工程作为依赖工程
- matlab多变量牛顿方法求解非线性方程组