数据结构
Snipergzf
这个作者很懒,什么都没留下…
展开
-
二叉树的非递归遍历
学过数据结构的同学都知道二叉树有三种常见的遍历方式,分别为前序遍历、中序遍历、后序遍历,而且这三种遍历的方式的递归编程都比较好写,然而他们的非递归遍历则不是那么的容易。下面就介绍一下树的三种遍历的非递归写法。前序遍历遍历顺序是:根节点->左儿子->右儿子// code oneprivate void nonRecursivePreOrder(BinaryNode<Integer> t) {原创 2016-11-28 22:27:49 · 329 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(八)
第二十九题:最小的k个数 题目描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路: 有一个时间复杂度是o(nlog(k))的方法,需要用到最大堆,用k个单位的空间换取时间效率,并且适用于大数据,然而对于这个题目并没有太大的必要。 所以下面介绍一种时间复杂度为o(n)的方法,就是借鉴快速排序方法,寻找最小的原创 2017-01-26 14:59:16 · 708 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(七)
第二十五题:复杂链表的复制 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路: 第一步:扫描原链表,把复制的结点就连在原结点的后面;例如:(原链表)A->B->C —–> A->A’->B->B’->原创 2017-01-24 23:30:40 · 375 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(九)
第三十二题:把数组排成最小的数 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路: 可以给出一个新的定义:两个数a、b,如果ab>ba,则定义a大于b,反之,则a小于b;根据此定义将数组中的所有数从小到大排序,然后依序组合成的数字就是最小数字。原创 2017-02-13 10:52:22 · 575 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(六)
第二十一题:栈的压入、弹出序列 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路: 首先判断第二个序列中的数字是否在栈顶,如果原创 2017-01-21 22:45:07 · 413 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(五)
第十五题:反转链表 题目描述: 输入一个链表,反转链表后,输出链表的所有元素。 思路: 由于在做指针反转的过程中,对于结点i,需要知道它前一个结点h来作为反转后的下一个结点,以及后一个结点j来继续推进。 代码:/*public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2017-01-20 23:32:47 · 380 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(三)
第七题:斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39。 思路: 传统思路都是用递归思路,虽然递归的思路虽然思路清晰,代码简洁,但是利用递归的写法计算重复太多,所以当n变大之后,时间呈指数地增长。所以这个题目利用循环的思路时间复杂度是o(n),先计算f(1),f(2),然后利用前两个数再计算f(3),依次类推,计算f(n)。原创 2017-01-18 22:22:35 · 729 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(二)
第四题:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 这个题目考的是二叉树遍历相关的知识点。二叉树常见的遍历方式有三种,分别是前中后序。前序的遍历顺序是:根节点-左子树-原创 2017-01-17 12:03:50 · 414 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(一)
第一题:二维数组中的查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 如题所述,可以发现右上角的数字是一行中最大的,又是这一列中最小的,那么我们可以从右上角开始查找。如果当前查找的数字小于target,删除当前行;如果当前查找数字大于target,则原创 2017-01-14 21:48:54 · 393 阅读 · 0 评论 -
几个二叉树概念的辨析
对以下三种二叉树进行以下概念的辨析,当然也是参考了网上大神的说法。 完全二叉树 设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。如下图: 理想二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的树称为理想二叉树。高度为h(从0开始算起)且包含2^(h+1)-1个节点的二叉树是理想二叉树原创 2016-11-27 22:57:28 · 532 阅读 · 0 评论 -
剑指Offer题目JAVA版思路与代码(四)
第十二题:树值的整数次方 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路: 这个题目主要的考点一是base, exponent都有0,负数,正数的情况,二是base的exponent次方可以用o(logN)的时间复杂度计算得到。 代码:public class Solution { public do原创 2017-01-19 22:27:39 · 364 阅读 · 0 评论