判断正数序列是不是二叉查找树的后序遍历结果
来源:互联网 发布:淘宝的便宜会员全没了 编辑:程序博客网 时间:2024/05/21 14:01
题目:输入一个正数数组,判断该数组是不是某二叉查找树的后序遍历结果。如果是,返回true,如果不是返回false
思路:
1.分治法:
分解:找到一个pivot,判断p到pivot结点以及pivot到q-1结点的两个子序列是否满足条件。
合并:当两个子序列满足条件后,判断第一个子序列的结点是否都小于根结点,第二个子序列的结点是否等大于根结点。
2.如何找到该pivot。
后序遍历结果根结点在最后,那么从最后一个序列开始往前,找到第一个小于该结点的结点,令其为pivot。当发现只要满足该条件后第二个子序列必然满足条件,所以需要判断第一个子序列是否都小于根结点。
代码如下:
int findPivot(int*a ,int p ,int q){int ele = a[q];int i=q-1;for (;i>=p;i--){if (a[i]<ele){break;}}return i;}bool isPosTree(int*a, int p, int q){if (a==NULL){return false;}if (p<q){int r = findPivot(a,p,q);//该过程已经保证第二子序列必然大于根结点bool isLeft = isPosTree(a,p,r);bool leftValued = true;//该过程验证第一子序列是否小于根结点for (int i=p;i<r;i++){if (a[i]>a[q]){leftValued=false;break;}}bool isRight = isPosTree(a,r+1,q-1);return (isLeft&&isRight&&leftValued);}return true;}
- 判断正数序列是不是二叉查找树的后序遍历结果
- 判断整数序列是不是某二叉查找树的后序遍历的结果
- 判断整数序列是不是二叉查找树的后序遍历结果
- 判断整数序列是不是二叉查找树(BST)的后序遍历结果
- 判断整数序列是不是二叉查找树(BST)的后序遍历结果
- C语言强化(八)判断序列是不是二叉查找树的后序遍历结果
- 判断整数序列是不是二叉查找树的后序遍历结果
- 二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
- 整数序列是不是二叉查找树的后序遍历结果
- 9.判断整数序列是不是二元查找树的后序遍历结果(树)
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 算法讨论(五)--判断整数序列是不是二元查找树的后序遍历结果
- 算法题11 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 9.判断整数序列是不是二元查找树的后序遍历结果
- MS100(9)-判断整数序列是不是二元查找树的后序遍历结果
- Codeforces round 146 C - Cyclical Quest(后缀自动机)
- ecshop 解决会员登录后价格显示为0的问题
- 关于2的补码
- 模式分解的无损连接性之深入剖析
- [Android]adb网络调试模式
- 判断正数序列是不是二叉查找树的后序遍历结果
- CentOS 6.4 下DB2登录报错SQL30082N reason "26"
- 创建最大内存的转储文件
- HDU1272并查集
- Nginx
- LinuxAPP学习笔记---持续更新
- JAVA是解释型语言还是编译型语言
- iOS编程——AVPlayer解决闪屏问题
- 第十四周 加倍后倒叙输出