剑指Offer算法题JAVA版21-30题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了。)
来源:互联网 发布:使用itunes更新软件 编辑:程序博客网 时间:2024/06/04 01:22
21.栈的压入、弹出序列、
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
(思路:模拟整个过程,如果,弹出序列正确那么栈里最终为空的,否则,栈不为空)
public boolean IsPopOrder(int [] pushA,int [] popA) { Stack<Integer> stack =new Stack<Integer>(); int j=0; for(int i=0;i<pushA.length;i++){ stack.push(pushA[i]); while(j<=i&&popA[j]==stack.peek()){ stack.pop(); j++; } } return stack.isEmpty()?true:false; }22.从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
(思路:用一个队列保存节点,每个被读取的节点将自己的左右孩子放入队列,然后出队列,并将出队列的元素值放入list。循环知道队列为空)
public class Solution {ArrayList<Integer> list=new ArrayList<Integer>();//存放节点值的list public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if(root==null){ return list; } ArrayList<TreeNode> list1=new ArrayList<TreeNode>();//队列 list1.add(root);//现将头节点放入队列 while(!list1.isEmpty()){ if(list1.get(0).left!=null){//放节点的左右孩子 list1.add(list1.get(0).left); } if(list1.get(0).right!=null){ list1.add(list1.get(0).right); } list.add(list1.get(0).val);//保存当前节点的值到list list1.remove(0);//出队列 } return list; }}
23.二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
23.1(思路:BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : ))
public class Solution { public static boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0){ return false; } if(sequence.length==1){ return true; } int i=0; while(sequence[i]<sequence[sequence.length-1]){ i++; } boolean isOk=false; int j=i; while(sequence[j]>sequence[sequence.length-1]){j++; } if(j==sequence.length-1){ isOk=true; } int [] sequenceSmall=new int[i]; for(int k=0;k<i;k++){ sequenceSmall[k]=sequence[k]; } int [] sequenceBig=new int[sequence.length-1-i]; for(int t=0;t<sequenceBig.length;t++){ sequenceBig[t]=sequence[i+t]; } if(sequenceSmall.length!=0&&sequenceBig.length!=0){ return isOk&&VerifySquenceOfBST(sequenceSmall)&&VerifySquenceOfBST(sequenceBig); }else if(sequenceSmall.length==0&&sequenceBig.length==0){ return isOk; }else if(sequenceSmall.length==0&&sequenceBig.length!=0){ return isOk&&VerifySquenceOfBST(sequenceBig); }else{ return isOk&&VerifySquenceOfBST(sequenceSmall); } }}
23.2非递归
public class Solution { public static boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0||sequence==null) return false;int n=sequence.length-1;while(n>=0){int i=0;while(sequence[i]<sequence[n])i++;while(sequence[i]>sequence[n])i++;if(i!=n) return false;n--;} return true;}}
24.二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
public class Solution {static Stack<TreeNode> stack =new Stack<TreeNode>(); public static TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null){ return null; } TreeNode nowNode=null; Stack<TreeNode> stack =stack1(pRootOfTree); if(!stack.isEmpty()){ nowNode=stack.pop(); while(!stack.isEmpty()){nowNode.left=stack.peek();stack.peek().right=nowNode;nowNode=stack.pop(); } } return nowNode;} public static Stack<TreeNode> stack1(TreeNode pRootOfTree){ if(pRootOfTree==null) return null; if(pRootOfTree.left!=null){ stack1(pRootOfTree.left); } stack.push(pRootOfTree); if(pRootOfTree.right!=null){ stack1(pRootOfTree.right); } return stack; }}
0 0
- 剑指Offer算法题JAVA版21-30题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了。)
- 剑指Offer算法题JAVA版4-12题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了)
- 剑指Offer算法题JAVA版13-20题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了。)
- JDBC基础知识(供个人我自己参考,来自网络。)
- 项目管理心得:一个项目经理的个人体会、经验总结 (供自己参考)
- 自己js写的分页小工具供大家参考
- Uri,Url,Urn,src,href的解释和区别,个人查资料理解,不严谨,只供参考
- hadoop个人笔记,仅供自己参考
- sqlserver知识点汇总(这段时间复习和回顾了一下sqlserver的一些知识),供大家参考和学习!
- 七牛java自己写的pfop操作,非官方sdk。
- Calendar类学习,自己写了个日历查询小程序,供大家学习参考
- mysql参考(仅供自己参考)
- enum枚举的试用笔记 (仅供个人参考)
- Springmvc遇到的问题和解决方案(仅供自己参考,不喜勿喷)
- 开始学习Matlab,一点一滴记录自己的所学 仅供个人参考Matlab(1)
- 条件变量的文章(供自己参考)
- 条件变量的文章(供自己参考)
- SSH中主要的配置文件记录,省得自己以后忘了,供自己参考
- 如何在window本地按章nodejs
- Linux minerd木马清除(续)
- 《幽的小殿》
- 剑指offer----字符流中第一个不重复的字符----java实现
- linux正则表达式[】
- 剑指Offer算法题JAVA版21-30题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了。)
- Java SPI(Service Provider Interface)简介
- linux的命令小总结
- 验证控件错误提示
- iOS 基于AVPLayer封装视频播放器
- mysql外键(Foreign Key)介绍和创建外键的方法
- freopen函数的使用
- POJ2337 Catenyms
- 求一个整数的各位数字之和,位数