2013年11月3日
摘要: 题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};例如图中的两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构。要查找树A中是否存在和树B结构一样的子树,可以分成两步:第一步在树A中找到和B的根节点的值一样的结点R;第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。第一步在树A中查找与根结点的值一样的结点,这实际上就是树... 阅读全文
posted @ 2013-11-03 21:36 猿人谷 阅读(6984) 评论(1) 推荐(3) 编辑
摘要: 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入 8 / \ 6 10 /\ /\5 7 9 11输出8 6 10 5 7 9 11。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结... 阅读全文
posted @ 2013-11-03 19:10 猿人谷 阅读(10335) 评论(0) 推荐(0) 编辑
摘要: 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;}; 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3.首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。如下图所示。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点。在剩余的结点 阅读全文
posted @ 2013-11-03 18:31 猿人谷 阅读(14088) 评论(0) 推荐(1) 编辑
摘要: 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契(Fibonacci)数列定义如下:效率很低的解法:long long Fibonacci_Solution1(unsigned int n){ if(n 2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下n-2级台阶的跳法数目,即为f(n-2)。因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2)。分析到这里,不难看出这实际上就是斐波那契数列了。#includeusi... 阅读全文
posted @ 2013-11-03 17:01 猿人谷 阅读(7365) 评论(0) 推荐(0) 编辑
摘要: 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.实现数组的旋转见左旋转字符串。和二分查找法一样,用两个指针分别指向数组的第一个元素和最后一个元素。我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的元素都大于或者等于后面子数组的元素。我们还可以注意到最小的元素刚好是这两个子数组的分界线。我们试着用二元查找法的思路在寻找这个最小的元素。首先我们用两个指针,分别指向数组的第一个元素和最后一个元素。按照题目旋转 阅读全文
posted @ 2013-11-03 16:13 猿人谷 阅读(2383) 评论(0) 推荐(0) 编辑
摘要: 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们定义为0,这样就能和其他扑克牌区分开来了。接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。举个例子,数组排序之后为{0,1,3,4,5},在 阅读全文
posted @ 2013-11-03 10:55 猿人谷 阅读(2269) 评论(0) 推荐(0) 编辑
摘要: 一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。其中qsort和compare的用法如下:void qs... 阅读全文
posted @ 2013-11-03 09:56 猿人谷 阅读(14794) 评论(0) 推荐(1) 编辑