ldjhust

工欲善其事 必先利其器

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年5月1日

摘要: 题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。思路:ASCII码表总共只有255个字符,只需建立一个整型数组分别存储每一个字符出现的次数,再顺序遍历字符串,查找其对应的在字符串中出现的次数,首先只出现一次的字符就是我们需要的字符。基于以上分析,代码如下: 1 char FirstOnceChar(const char *Str) 2 { 3 assert (Str != NULL); 4 5 // ASCII总共只有255个字符 6 int Count[255]; 7 8 memset (Count, 0, 255 * ... 阅读全文
posted @ 2013-05-01 17:09 ldjhust 阅读(185) 评论(0) 推荐(0) 编辑

摘要: 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入78/ \6 10/ \ / \5 7 9 11输出8 6 10 5 7 9 11。二叉树节点的数据结构:1 struct BinaryTreeNode2 {3 int nData;4 5 BinaryTreeNode *lChild;6 BinaryTreeNode *rChild;7 };思路:按层次遍历一般用队列很容易实现,直接上代码: 1 void LevelTraversalBinaryTree(BinaryTreeNode *root) 2 { 3 asser... 阅读全文
posted @ 2013-05-01 16:41 ldjhust 阅读(613) 评论(2) 推荐(0) 编辑

摘要: 题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:8/ \6 10/\ /\5 7 9 11输出:8/ \10 6/\ /\11 9 7 5二分查找树的节点数据结构为:1 struct BinaryTreeNode2 {3 int nData;4 5 BinaryTreeNode *lChild;6 BinaryTreeNode *rChild;7 };思路:很简单,每次交换根节点的左右子树直到也节点即可,直接上代码.递归方法: 1 void ChangeToMirr... 阅读全文
posted @ 2013-05-01 15:56 ldjhust 阅读(180) 评论(0) 推荐(0) 编辑

摘要: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。思路:因为数组是升序排列的(即使没有排序,我们也可以先排下序),所以很简单,设置两个循环变量,左边循环指向数组第一个数的下标,右边循环变量指向数组最后一个数的下标,然后两个数求和与指定的数比较大小,若等于则找到了一组数,推出循环;若大于,则将右边的循环标量往左移一位,继续比较;若小与,则将左边循环变量往右移一位,继续比较,若一 阅读全文
posted @ 2013-05-01 14:52 ldjhust 阅读(292) 评论(1) 推荐(1) 编辑

摘要: 题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。链表数据结构定义如下:1 struct LISTNODE2 {3 int nData;4 5 LISTNODE *next;6 };思路:用两个指针,第一个指针先走k步,然后第二个指针指向第一个节点,开始和第一个指针一起往后走。注意:1、我假设这个链表有头节点,若要求链表无头节点,则代码需做修改,但核心思想是一样的 2、注意k的范围,对于k的各种取之给一个合适的反馈。基于以上分析,写出代码: 1 LISTNODE *GetLastKNode(LISTNODE *head, int k... 阅读全文
posted @ 2013-05-01 14:20 ldjhust 阅读(279) 评论(0) 推荐(0) 编辑

摘要: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义距离为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。 二叉树的数据结构:1 struct BinaryTreeNode2 {3 int nData;4 5 BinaryTreeNode *lChild;6 BinaryTreeNode *rChild;7 }; 思路:这里的最大距离出现的地方有两种情况,一种是穿过根节点的两个叶节点的最大距离,另一种情况是左子树的最大距离或右子树的最大距离。对于前一种情况我们只需返回左右子树的深度再加上根节点下的两条边即可,因此我们可... 阅读全文
posted @ 2013-05-01 11:13 ldjhust 阅读(203) 评论(0) 推荐(0) 编辑