c 面试题之树的子结构



c 面试题之树的子结构。输入两棵二叉树AB,判断B是不是A的子结构。二叉树结点的定义如下:

struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};

如下图,右边的二叉树是左边二叉树的子结构。

判断的过程如下:第一步,在树A中查找与树B的根节点的值一样的结点,这实际上就是树的遍历。第二步,如果找到了这样的结点,判断树A的这个结点的子树是否和树B具有相同的结构。无论是第一步,还是第二步,都可以用递归的方法求解。下面是示例代码:

bool[......]

Read more

c 面试题之合并两个排序的链表



 c 面试题之合并两个排序的链表。输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然递增排序。链表结点定义如下:

struct ListNode
{
    int m_nValue;
    ListNode* m_pNext;
};

先分析一下合并过程。假设链表1的头结点的值小于链表2的头结点的值,则链表1的头结点作为合并后的链表的头结点。然后继续合并两个链表中剩余的结点。两个链表中剩下的结点依然是排序的,所以合并这两个链表的步骤和前面的步骤一样。这是典型的递归过程,可以定义递归函数来完成这一合并过程。

参考代[......]

Read more

丽人啊!你在哪里?

丽人啊!你在哪里?我好孤单好寂寞,也很惨,我不是想博得大家的同情,而是希望大家能明白能理解我,另外我也可以抒发一下自己的心情,发泄一下自己内心的痛苦。如今的我就好像是汪峰那首歌《春天里》:

还记得许多年前的春天
那时的我还没剪去长发
没有信用卡也没有她
没有24小时热水的家
可当初的我是那么快乐
虽然只有一把破木吉他
在街上 在桥下 在田野中
唱着那无人问津的歌谣
如果有一天 我老无所依
请把我留在 在那时光里
如果有一天 我悄然离去
请把我埋在 这春天里
没有情人节,没有美丽的姑娘,没有温暖的家,只有一把借来的破旧的木吉他。时光一天一天地过去,而我的爱情鸟会在哪[......]

Read more

c 面试题之二叉树中和为某一值的路径

c 面试题之二叉树中和为某一值的路径(图示)。输入一棵二叉树以及一个整数,打印出二叉树里面结点值的与为输入整数的所有路径。由树的根结点开始往下一直到叶节点所经过的结点形成一条路径。二叉树结点的定义如下:

struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};

实例如下,输入如下二叉树和整数22,则打印出两条路径:10、5、7和10、12。

这是一道笔试题,考查对树这种基本数据结构以及递归函数的理解。

当访问到某一结点时将该结点添加到路[......]

Read more

c 面试题之复杂链表的复制

c 面试题之复杂链表的复制。请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL结点定义如下:

struct ComplexListNode
{
int m_nValue;
ComplexListNode* m_pNext;
ComplexListNode* m_pSibling;
};

下图是一个含有5个结点的该类型复杂链表。实线箭头表示m_pNext指针,虚线箭头表示m_[......]

Read more

c 面试题之二叉搜索树与双向链表

c 面试题之二叉搜索树与双向链表实例代码介绍。面试题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

二叉树结点的定义:

struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};

下图是一个二叉树转换示例:

二叉树的每个结点都有两个指向子结点的指针。双向链表的每个结点也有两个指针,分别指向前一个结点和后一个结点。所以这两种结点的结构相似。

二叉搜索树是一种排序的数据[......]

Read more

c++算法题输出字符串中字符的所有组合

输入一个字符串,输出该字符串中字符的所有组合。例如输入abc,它的组合有a、b、c、ab、ac、bc、abc。在前面学习全排列算法时,讲到了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。假设在长度为n的字符串中求m个字符的组合。可以先从头扫描字符串的第一个字符。针对第一个字符,有两种选择:一是把这个字符放到组合中去,则接下来需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,则接下来需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是该思路的参考代码实例:

void Combination(char *stri[......]

Read more

c++解决八皇后问题

在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图就是一种符合条件的摆放方法。请求出总共有多少种摆法。

解决这个八皇后问题通常需要用递归,而递归对编程能力的要求比较高。因此有不少面试官青睐这个题目,用来考察应聘者的分析复杂问题的能力以及编程的能力。因为八个皇后中的任意两个不能处在同一行,那么肯定是每一个皇后占据一行。于是可以定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。先把ColumnIndex的八个数字分别用0-7初始化,接下来要做的事情就是对数组ColumnIndex做全排列[......]

Read more

信息学奥赛培训

一、程序知识讲解
(一)程序设计:培训学生具有将简单问题抽象成适合计算机解决的模型的基本能力以及针对模型设计简单算法。
(二)基本算法的处理:初等算法包括:计数、统计、数学运算等;排序算法,包括:冒泡法、插入排序、合并排序、快速排序;查找,包括:顺序查找、二分法。
(三)深入算法:离散数学知识的应用(如排列组合、简单图论、数理逻辑);贪心法;简单搜索算法(深度优先 广度优先)搜索中的剪枝;动态规划的思想及基本算法。
二、练习与提高
(一)学生做题:当教师把程序知识讲解完后,将安排学生做相关的练习题,难易程度分为三个等级。采取由容易到难的模式,逐步推进学生解题能力。
(二)教师讲题:[......]

Read more