判断序列是否是二叉搜索树的后序遍历序列
2016-04-10 20:49
288 查看
题目要求:判断序列是否是二叉搜索树的后序遍历序列,给定一个序列,判断这个序列是否是二叉搜索树的一个正确的后序遍历序列。
算法思想:
我们知道,后续遍历根节点最后遍历,所以我们需要首先找到根节点。第二部就是根据二叉搜索树的性质了,二叉搜索树的左子树的值全都比根节点小,右子树的值全都比根节点的值大,所以我们需要运用递归,逐个去检查左子树和右子树是否符合这个规律即可。
算法实现:
参考书籍:
《剑指offer》
算法思想:
我们知道,后续遍历根节点最后遍历,所以我们需要首先找到根节点。第二部就是根据二叉搜索树的性质了,二叉搜索树的左子树的值全都比根节点小,右子树的值全都比根节点的值大,所以我们需要运用递归,逐个去检查左子树和右子树是否符合这个规律即可。
算法实现:
#include<iostream> using namespace std; bool IsLRDofBST(int *data, int nLength){ if(data == NULL || nLength < 0){ return false; } int root = data[nLength - 1]; int i = 0; for(; i < nLength - 1; ++i){ //找到左右子树分界点 if(data[i] > root){ break; } } int j = i; for(; j < nLength - 1; ++j){ //对右子树进行检查 if(data[j] < root) return false; } bool left = true; if(i > 0){ left = IsLRDofBST(data, i); //递归左子树 } bool right = true; if(i < nLength - 1){ right = IsLRDofBST(data + i, nLength - i - 1); //递归实现右子树 } return (left && right); } int main(){ int tree[] = {15, 6, 9, 11, 10, 8}; int len = sizeof(tree) / sizeof(int); bool result = IsLRDofBST(tree, len); if(result == true) cout<<"The right answer"<<endl; else cout<<"The wrong answer"<<endl; return 0; }
参考书籍:
《剑指offer》
相关文章推荐
- Calculator(补)
- 大数减法1.2
- HTML 表单(form) 使用详解
- 147. Insertion Sort List
- HDU 1074 Doing Homework
- LeetCode *** 125. Valid Palindrome
- 关于hibernate使用log4j
- linux ssh -l 命令运用
- 网络基本功系列:细说交换机
- 数据库下载
- [置顶] MySQL5.7.9安装
- 快速排序的实现(两种)
- 【数位DP】[CQOI2016]手机号码
- Centos7 Ansible安装
- libcudnn.so.6.5:cannot open sharedobject file: No such file or directory
- 谁是真泛型
- Android - 十分钟理解手机适配 与 lib工程生成包
- 第六周进度报告
- 第四次作业
- 排序注意事项