![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 56
skyxmstar
这个作者很懒,什么都没留下…
展开
-
java实现二叉树的构建以及3种遍历方法
目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 package cn.com.niuke.shujujiegou;import java.util.ArrayList;import java.util.List;public class BinaryTreeTraverse { private int[] arr = {原创 2017-03-29 17:24:01 · 413 阅读 · 0 评论 -
最小堆最大堆的详细解读
堆排序解释第一篇1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]2.转载 2017-04-02 12:37:00 · 1099 阅读 · 0 评论 -
剑指offer:(6)查找和排序:旋转数组中的最小值
package co.com.jianzhioffer;public class Solution6 { public static int minNumberInRotateArray(int [] array) { int low = 0; int high = array.length-1; while(low<high){ int原创 2017-04-17 17:54:37 · 273 阅读 · 0 评论 -
剑指offer:(19)面试官谈面试思路:二叉树的镜像
package co.com.jianzhioffer;public class Solution19 { public class TreeNode { int val; TreeNode left = null; TreeNode right = null; TreeNode(int val) { this.val = val; } } public原创 2017-04-26 17:58:57 · 351 阅读 · 0 评论 -
剑指offer:(4)树:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值再序列的中间,左子树的节点的值位于根节点的值的左边而右子树的节点的值位于原创 2017-04-14 16:53:03 · 291 阅读 · 0 评论 -
剑指offer:(5)栈和队列:用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。package co.com.jianzhioffer;import java.util.Stack;public clas原创 2017-04-14 18:07:22 · 275 阅读 · 0 评论 -
二叉树的遍历 递归非递归 思路和 java实现
有一部分转自:http://blog.csdn.net/clam_clam/article/details/6845399#二叉树遍历首先弄清遍历流程。中序遍历:第一次经过从它找左,第二次经过找右,第三次经过回来。第二次经过访问它。算法实现:第二次访问是 pop(&S,&p);Visit(p->data);因为中序遍历跟第三次经过没关系。所以第二次就弹出栈了。Jav原创 2017-04-06 11:36:51 · 250 阅读 · 0 评论 -
剑指offer:(13)代码的完整性: ]调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。package co.com.jianzhioffer;/* * 插排思想 */public class Solution13 { public static void reOrderArray(int a原创 2017-04-25 11:58:29 · 265 阅读 · 0 评论 -
剑指offer:(18)代码的鲁棒性:树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)方法一: 思路:参考剑指offer 1、首先设置标志位result = false,因为一旦匹配成功result就设为true, 剩下的代码不会执行,如果匹配不成功,默认返回false 2、递归思想,如果根节点相同则递归调用DoesT原创 2017-04-26 15:19:08 · 283 阅读 · 0 评论 -
数组注意事项
数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是多维数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确 选项代码中能正确操作数组元素的是()123原创 2017-06-16 10:45:19 · 619 阅读 · 0 评论 -
一步一图一代码,一定要让你真正彻底明白红黑树(平衡二叉树)
一步一图一代码,一定要让你真正彻底明白红黑树 作者:July 二零一一年一月九日-----------------------------本文参考:I、 The Art of Computer Programming Volume III、 Introduction to Algorithms, Second EditionIII、The An转载 2017-04-12 10:56:46 · 10064 阅读 · 2 评论 -
剑指offer:(3)单链表:从尾到头打印链表
package co.com.jianzhioffer;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution3 { //递归 static ArrayList list=new ArrayList(); public static Arr原创 2017-04-11 18:01:52 · 303 阅读 · 0 评论 -
赛马网:数据结构-刷题:1.股神
题目描述 有股神吗?有,小赛就是!经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱? 输入输入包括多组数据;每行输入一个n,1<=n<=10^9 。样例输入123原创 2017-03-29 23:29:56 · 1034 阅读 · 0 评论 -
编程题(1):笔试题-京东软件测试2018实习招聘
题目描述 小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试。考试结束后,小明估算出每题做对的概率,p1,p2,...,pn。你能帮他算出他通过考试的概率吗? 输入输入第一行一个数n(1样例输入450 50 50 50原创 2017-04-08 11:22:58 · 5440 阅读 · 0 评论 -
编程题(2):京东-笔试题-2018实习招聘
拍卖(京东2017实习生招聘真题) 题目描述 公司最近新研发了一种产品,共生产了n件。有m个客户想购买此产品,第i个客户出价Vi元。为了确保公平,公司决定要以一个固定的价格 出售产品。每一个出价不低于要价的客户将会得到产品,余下的将会被拒绝购买。请你找出能让公司利润最大化原创 2017-04-08 21:06:12 · 1292 阅读 · 0 评论 -
编程题(3):京东-笔试题-2018实习招聘
异或(京东2017实习生真题) 题目描述 异或运算是常见的二进制运算,给出两个n位二进制数a,b。a异或b的运算依次考虑二进制的每一位,若这一位相同,那么这一位的异或结果就是0,不同就是1。例如a=1100, b=0100。执行a异或b的运算,a的最高位是1,b的最高位是0,两个数字不同所以最高位异或结果是1;a和b次高位都是1,所以次高位异或为0;最后两位它们都原创 2017-04-08 21:33:54 · 436 阅读 · 0 评论 -
怎么判断一组数字是不是堆
比如一组数字15,30,22,93,52,71,要判断他是不是堆排序 这道题目,15是根节点,左孩子30和右孩子22都大于15,同理30的左右孩子分别是93、52,都大于30,22的左孩子71大于它,所以这棵树是个不完全二叉树,并且可以看出它是小堆栈。 做此类题的诀窍在于:按完全二叉树的性质去排列序列,在判断是否孩子结点都大于父亲结点,或者孩子结点都小于父亲结点。堆排序是选择排序的一种。原创 2017-03-15 21:35:27 · 5410 阅读 · 0 评论 -
栈、堆、方法区、本地方法区、寄存器
stack(栈)由系统自动分配,heap(堆)需要程序员自己申请,C中用函数malloc分配空间,用free释放,C++用new分配,用delete释放。当然热爱java的童鞋肯定更关心java的内存空间划分(虽然强大的java让程序猿在编程时不需要考虑太多内存方面的细节)java 对内存空间的划分五部分; 栈、堆、方法区、本地方法区、寄存器。 1、栈内存:存储都是原创 2017-04-10 22:37:35 · 5238 阅读 · 0 评论 -
选择排序、插入排序
一、选择排序 1、原理:选择一个值array[0]作为标杆,然后循环找到除这个值外最小的值(查找小于标杆的最小值),交换这两个值,这时最小值就被放到了array[0]上,然后再将array[1]作为标杆,从剩下未排序的值中找到最小值,并交换这两个值。 如图:(数据结构与算法中的图) 2、时间复杂度:O(N^2),与冒泡排序相比减少了数组交换的次数原创 2017-04-02 09:56:25 · 300 阅读 · 0 评论 -
指针数组,数组指针
int *s[8]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。 int (*s)[8]; //定义一个数组指针,该指针指向含8个元素的一维数组(数组中每个元素是int型)。 区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。 int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由i原创 2017-04-02 13:23:24 · 328 阅读 · 0 评论 -
剑指offer编程题(1):数组
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素a[row][col]与target进行比较, 当target小于元素a[row]原创 2017-04-10 15:27:43 · 420 阅读 · 0 评论 -
剑指offer:(30)时间效率 :最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。package cn.com.jianzhioffer;import java.util.ArrayList;public class Solution30 {// public ArrayList GetLeastNumbers_Solution(int[]原创 2017-06-29 23:23:57 · 309 阅读 · 0 评论