数据结构题目,后续遍历
2016-03-02 18:47
246 查看
判断一个给定的数组,是不是二叉树的后续遍历结果的思想是:
给定数组,数组最后一个借点值,坑定是根节点的值,从数组第一个节点开始,比根节点小的值一定是左子树节点,比根节点大的值一定是右子树节点。接着递归判断左子树的状况,例如第一个测试用例。{5,7,6,9,11,10,8}根节点为8. 5,7,6 都是左子树节点, 9 11 10 都是右子树节点。接着递归判断
给定数组,数组最后一个借点值,坑定是根节点的值,从数组第一个节点开始,比根节点小的值一定是左子树节点,比根节点大的值一定是右子树节点。接着递归判断左子树的状况,例如第一个测试用例。{5,7,6,9,11,10,8}根节点为8. 5,7,6 都是左子树节点, 9 11 10 都是右子树节点。接着递归判断
package Abc; /** * 判断整数序列是不是二叉树的后续遍历结果 * */ public class Bestfor { public static void main(String[] args){ int[] array={9,6,9}; if(isAfterResult(array,0,array.length-1)){ System.out.println("此数组符合二叉树的后序遍历"); }else{ System.out.println("此数组不符合二叉树的后序遍历"); } } //判断一个整数数组是不是二叉树的后序遍历结果,使用递归算法 private static boolean isAfterResult(int[] array,int start,int stop){ if(null == array){ throw new NullPointerException(); } //判断一下start 和stop是否月结 if(start < 0 || start >array.length || stop <0 || stop >array.length || start >stop){ throw new ArrayIndexOutOfBoundsException(); } //判断的时候分为三种情况,第一种情况当数组的长度小于3 //第二种情况当数组的长度等于3,判断数据的根节点,与头结点。 //第三种情况。当数组的长度大于3的情况,进行递归 int count= stop -start +1; if(count < 3){ return true; }else if(count == 3){ //等于3的情况,当根节点大于等于头结点,并且根节点小于等于第二个 元素 if(array[stop] >= array[start] && array[stop]<= array[start+1]){ return true; }else{ return false; } }else{ //循环遍历数组 int index=-1; for(int i=start;i<stop;i++){ //如果第i个元素大于根节点的元素 if(array[i]>=array[stop]){ index=i; break; } } if(index == -1 || index ==0){ return isAfterResult(array,start,stop-1); }else{ return isAfterResult(array,start,index-1) && isAfterResult(array,index,stop-1); } } } }
相关文章推荐
- python 与数据结构--冒泡排序
- 宏元编程——数据结构——tuple元组
- 数据结构和算法分析习题解答之二——第1章习题解答
- Python-----数据结构
- 数据结构与算法学习笔记(三)
- 数据结构总结(6)
- 数据结构之霍夫曼压缩,更易理解文件压缩过程
- 6-3-二叉树(三叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构2—Java_栈_顺序存储
- Windows API中的数据结构
- 2015年大二上-数据结构-图-2-(5)-拓扑排序
- 如何实现自定义的数据结构?以线性表的实现为例分析
- 数据结构-单向无头不循环链表基本实例
- 常用数据结构的应用场景
- 2015年大二上-数据结构-图-2-(4)-Floyd算法
- LeetCode题目难度分布(含面试频率及使用的数据结构与算法)
- 常见数据结构复杂度
- 数据结构与算法面试总结
- 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 2015年大二上-数据结构-图-2-(3)-Dijkstra算法