
数据结构
yanghuiysz
这个作者很懒,什么都没留下…
展开
-
后缀表达式计算算术表达式
最近在学习二叉树,学习了怎样计算算术表达式计算算术表达式的大体思路是: 1. 首先是将中缀表达式转换成后缀表达式 2. 将后缀表达式,借助栈就能轻易的求出值 例如: (1+2)x3的后缀表达式是 12+3x,借助一个栈,将1,2放进去,在发现是+,将1,2弹出,计算1+2,计算出结果(3),放进去,栈中有3,3再遇见‘x’号,将3,3弹出,计算出结果(9),最终计算出结果。原创 2016-06-28 10:19:16 · 837 阅读 · 0 评论 -
链表的倒序遍历
链表的倒序遍历,我们很容易想到,利用栈来存储,再输出 public void reversePrint(){ Stack<Node> stack=new Stack<Node>(); Node p=head; while(p!=null){ stack.push(p); p=p.next;原创 2016-08-03 19:31:14 · 941 阅读 · 0 评论 -
求两个节点的最近祖先
求两个节点的最近祖先: 思路1:如果一个节点是最近祖先的话,那么这两个节点,必须分布在该节点的左右子树上。 思路2:非递归后序遍历,分别找到根节点到两个节点的路径,求出最近祖先。 本此根据思路二写出 //求从根节点到指定节点之间的路径 public void Route(Node node,Arraylist<Node> arraylist){ Stack<原创 2016-08-11 17:13:14 · 410 阅读 · 0 评论 -
树的遍历
二叉树的递归遍历 /** 递归实现前序遍历 */ public void preorder(Node p) { if (p != null) { System.out.println(p.data); preorder(p.getLeft()); preorde原创 2016-08-01 17:31:03 · 217 阅读 · 0 评论 -
百度2017暑期实习生编程题
短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);是对FCFS算法的改进,其目标是减少平均周转时间。 短作业优先调度算法基于这样一种思想: 运行时间短的优先调度; 如果运行时间相同则调度最先发起请求的进程。 PS:本题题面描述有误,但原题如此,不宜修改,实际优先级如下: 1)接到任务的时间; 2) 如果接原创 2016-08-10 17:32:35 · 482 阅读 · 0 评论 -
动态规划:
如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大。 输入描述 Input Description 第一行是数塔层数N(1<=N<=100)。 第二行起,按数塔图形,有一个或多个的整数,表示该层节点的值,共有N行。 输出描述 Output Description 输出最大值。 样例输入 Sample Input 5原创 2016-08-17 10:24:43 · 664 阅读 · 0 评论 -
二叉排序树转换成双向链表
在面试过程中经常会出现二叉排序树转换成双向链表的问题 思路:在二叉树的学习中,我会发现,基本所有的问题都可以用树的先序遍历、中序遍历、后序遍历解决,所以我们可以使用这个思路来解决。 在此问题中,使用的是:后序遍历。 /* * 将二叉树转换成双向链表:直接在树上改动(后序遍历) */ public Node change_Linkedlist(Node head)原创 2016-06-27 19:38:22 · 1848 阅读 · 1 评论 -
动态规划:击鼓传花
题目描述 学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。 聪明的小赛原创 2016-08-16 20:44:36 · 4897 阅读 · 1 评论 -
求正数数组的最小不可组成和
给定一个全是正数的数组arr,定义一下arr的最小不可组成和的概念: 1,arr的所有非空子集中,把每个子集内的所有元素加起来会出现很多的值,其中最小的记为min,最大的记为max; 2,在区间[min,max]上,如果有一些正数不可以被arr某一个子集相加得到,那么这些正数中最小的那个,就是arr的最小不可组成和; 3,在区间[min,max]上,如果所有的数都可以被arr的某一个子集相加得到,那原创 2016-08-16 18:39:06 · 408 阅读 · 0 评论 -
递归:排成一条线的硬币博弈问题
面值为正数的硬币放置成一排,玩家1和玩家2轮流拿走硬币,规定每个玩家在拿硬币时,只能拿走最左或最右的硬币。 例如: 硬币面值与排列为:1,2,3,4,5,现在轮到玩家1拿硬币。 在当前状态下,玩家1只能拿走1或5, 如果玩家1拿走1,则排列变为2,3,4,5,那么接下来玩家2可以拿走2或5,然后继续轮到玩家1拿硬币… 如果玩家1拿走5,则排列变为1,2,3,4,那么接下来玩家2可以拿走1或4;然后继原创 2016-08-16 15:39:44 · 830 阅读 · 0 评论 -
红黑树
最近在学红黑树,发现一篇比较好的介绍红黑树的博客。http://www.cnblogs.com/skywang12345/p/3245399.html转载 2016-07-20 09:07:01 · 180 阅读 · 0 评论 -
队列和栈
两个栈构成一个队列问题描述:用两个栈组成一个队列这个很容易想出,队列的特点是先进先出,栈的特点是先进后出。思路:操作顺序push(1),push(2),push(3),push(4),pop(),pop(),push(5),push(6),pop().pop()....对于push(1),push(2),push(3),push(4),先存入一个stack1中,下一个操作pop(),则需要将s原创 2016-07-05 16:38:40 · 292 阅读 · 0 评论 -
数据结构:遍历一次获得链表的倒数第N个节点
最近在学习链表中,发现一道题: 遍历一次链表,获得链表的倒数第N个节点思路: 要想获得倒数第N个节点,就会不自然的想到,倒数第N个节点是正数第M-N+1个节点(假设链表长度是M), 这时候,我们以,M-N+1和M+1这两个节点为标准,一起向前遍历,直到M-N+1的节点为1,这时,M+1的节点为N+1. 我们将p1和p2分别替换上边的指针,且p1和p2之间相差n个节点原创 2016-07-04 15:59:10 · 1047 阅读 · 0 评论 -
根据前序遍历中序遍历求二叉树
public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1); return root; } public TreeNode reConstruc原创 2016-08-23 17:01:40 · 541 阅读 · 0 评论