随笔分类 -  数据结构与算法

1
摘要:题目: 给定一个序列,判断是不是二叉搜索树的后序遍历 思路: 递归版: 一个正确的后序遍历可以分为三段来看: 1:最后一个值是根节点 2:左子树节点(都比根节点值小) 3:右子树节点(都比根节点大) 且满足左子树个数加右子树个数等于N-1;(N为后序遍历的节点总个数) 左子树和右子树又可以进行同样的 阅读全文
posted @ 2017-09-16 18:35 llauser 阅读(274) 评论(0) 推荐(0)
摘要:题目: 按层次输出二叉树的节点,同一层次按从左到右 思路: 层次遍历,一个队列解决 代码: 阅读全文
posted @ 2017-09-16 18:10 llauser 阅读(904) 评论(0) 推荐(0)
摘要:题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相 阅读全文
posted @ 2017-09-16 18:03 llauser 阅读(356) 评论(0) 推荐(0)
摘要:题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 四个方向遍历,每遍历一 阅读全文
posted @ 2017-09-14 14:13 llauser 阅读(131) 评论(0) 推荐(0)
摘要:题目: 操作给定的二叉树,将其变换为源二叉树的镜像。 :源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 思路: 对于每一个节点都需要做转换两个指针的指向;所以可以用递归去做 代码: /* struct TreeNo 阅读全文
posted @ 2017-09-14 13:39 llauser 阅读(154) 评论(0) 推荐(0)
摘要:题目: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路: 可以递归的寻找到节点值相同的点,进行树是否相等的判断(也用递归) 代码: 阅读全文
posted @ 2017-09-14 13:18 llauser 阅读(321) 评论(0) 推荐(0)
摘要:题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路: 递归版本:每次只判断当前的两个头结点的大小,执行递归操作,返回较小的头结点; 非递归版本:每次需要循环判断出一个结构: p1-->p2-->p3 ; o1-->o2-->o3; 其中 当:  阅读全文
posted @ 2017-09-14 12:47 llauser 阅读(132) 评论(0) 推荐(0)
摘要:题目: 输入一个链表,反转链表后,输出链表的所有元素。 思路: 反转链表,对于片段 1 >2 >3循环操作; 要反转链表需要两步: 一,将2->next指向1 (如果不保存3那么此时就丢失了对3的引用) 二,将链表往后移 即 : 1=2; 2=3;3=3->next 注意的点: 一,首节点的next 阅读全文
posted @ 2017-09-13 17:56 llauser 阅读(155) 评论(0) 推荐(0)
摘要:题目: 输入一个链表,输出该链表中倒数第k个结点。 思路: 两个指针一个先走k步,然后两个一起走,先走的到达终点时后一个指向的就是所求的节点,注意可能长度小于k,这时候应该返回null 代码: 阅读全文
posted @ 2017-09-13 16:05 llauser 阅读(125) 评论(0) 推荐(0)
摘要:题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路: 两种方式: 一种添加o(n)的空间取得o(n)的时间复杂度; 一种不增加空间:冒泡排序,或者插入排序;时间复杂 阅读全文
posted @ 2017-09-13 15:52 llauser 阅读(276) 评论(0) 推荐(0)
摘要:题目: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方 思路: double型数据base可正可负,所以不能单纯的累乘exponent次; 代码: 阅读全文
posted @ 2017-09-13 15:47 llauser 阅读(250) 评论(0) 推荐(0)
摘要:题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: 通过 1 的左移来和这个整数的每一位进行与操作,计算出二进制中1的个数 代码: 阅读全文
posted @ 2017-09-13 15:32 llauser 阅读(137) 评论(0) 推荐(0)
摘要:题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路: f(n)=f(n-1)+f(n-2)+.......+f(1); f(n-1)=f(n-2)+f(n-3)+......+f(1) 所以:f(n)=2f(n-1) 代码: 阅读全文
posted @ 2017-09-13 15:21 llauser 阅读(91) 评论(0) 推荐(0)
摘要:题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路: 这是斐波那契数列问题的变体,f(n)表示跳上第n阶台阶的方法数,那么只能从n-1阶跳上去(+1),方法数为调到n-1阶的方法数也就是f(n-1); 或者从n-2阶跳上去(+2),方法数为跳到f 阅读全文
posted @ 2017-09-13 14:57 llauser 阅读(112) 评论(0) 推荐(0)
摘要:题目: 现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 思路: 递归会导致超时或者超内存的问题,改用循环,因为f(n)=f(n-1)+f(n-2) 所以只需要保留前两个数值就能求出当前的数值 代码: 阅读全文
posted @ 2017-09-13 13:42 llauser 阅读(153) 评论(0) 推荐(0)
摘要:题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路: 栈的特性:先进后出 队列的特:先进先出 将栈1的内容全都弹出,然后推入栈2,弹出栈2 达到先进先出的功能;所以分为push栈 和 pop 栈 代码: 拓展: 用两个队列实现一个栈: 思路: 两个队列 阅读全文
posted @ 2017-09-13 09:37 llauser 阅读(143) 评论(0) 推荐(0)
摘要:题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 前序遍历:根 >左 >右; 中序遍历:左 >根 阅读全文
posted @ 2017-09-12 21:48 llauser 阅读(133) 评论(0) 推荐(0)
摘要:题目: 输入一个链表,从尾到头打印链表每个节点的值。 思路: 很容易想到用栈实现,后进先出;遍历一遍节点压栈,弹出栈的数值;也可以用递归实现; 代码: 递归版: 用栈实现: 阅读全文
posted @ 2017-09-04 13:13 llauser 阅读(138) 评论(0) 推荐(0)
摘要:题目: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路: 遍历两遍的字符串数组;第一遍记录空格的个数num,由num和字符串长度可以计算出新的字符串的长度newLength;第二遍替换, 阅读全文
posted @ 2017-09-04 11:04 llauser 阅读(120) 评论(0) 推荐(0)
摘要:题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 因为从左到右递增,从上到下递增,所以很容易发现是二分查找的变体,需要找到一个点(p),左边的数比这个数小,右边的比他 阅读全文
posted @ 2017-09-04 10:55 llauser 阅读(149) 评论(0) 推荐(0)

1