03 2020 档案

摘要:// 面试题37:序列化二叉树 // 题目:请实现两个函数,分别用来序列化和反序列化二叉树。 #include <cstdio> #include "BinaryTree.h" #include <iostream> #include <fstream> using namespace std; v 阅读全文
posted @ 2020-03-31 22:48 源周率 阅读(119) 评论(0) 推荐(0)
摘要:// 面试题36:二叉搜索树与双向链表 // 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求 // 不能创建任何新的结点,只能调整树中结点指针的指向。 #include <cstdio> #include "BinaryTree.h" void ConvertNode(Bin 阅读全文
posted @ 2020-03-31 21:30 源周率 阅读(114) 评论(0) 推荐(0)
摘要:// 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个 // 结点外,还有一个m_pSibling 指向链表中的任意结 阅读全文
posted @ 2020-03-31 16:45 源周率 阅读(115) 评论(0) 推荐(0)
摘要:// 面试题34:二叉树中和为某一值的路径 // 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所 // 有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 #include <cstdio> #include "BinaryTree.h" #include < 阅读全文
posted @ 2020-03-31 11:54 源周率 阅读(155) 评论(0) 推荐(0)
摘要:// 面试题33:二叉搜索树的后序遍历序列 // 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 // 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 #include <cstdio> // BST:Binary Search Tree, 阅读全文
posted @ 2020-03-31 10:24 源周率 阅读(130) 评论(0) 推荐(0)
摘要:// 面试题32(三):之字形打印二叉树 // 题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺 // 序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, // 其他行以此类推。 #include <cstdio> #include "BinaryTree. 阅读全文
posted @ 2020-03-30 23:58 源周率 阅读(183) 评论(0) 推荐(0)
摘要:// 面试题32(二):分行从上到下打印二叉树 // 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层 // 打印到一行。 #include <cstdio> #include "BinaryTree.h" #include <queue> void Print(BinaryT 阅读全文
posted @ 2020-03-30 22:57 源周率 阅读(126) 评论(0) 推荐(0)
摘要:// 面试题32(一):不分行从上往下打印二叉树 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 #include <cstdio> #include "BinaryTree.h" #include <deque> void PrintFromTopToBottom 阅读全文
posted @ 2020-03-30 22:43 源周率 阅读(164) 评论(0) 推荐(0)
摘要:// 面试题31:栈的压入、弹出序列 // 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是 // 否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、 // 5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但 // 4、3、5、 阅读全文
posted @ 2020-03-30 17:24 源周率 阅读(160) 评论(0) 推荐(0)
摘要:// 面试题30:包含min函数的栈 // 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min // 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 #pragma once #include <stack> #include <assert.h> // 阅读全文
posted @ 2020-03-29 17:25 源周率 阅读(154) 评论(0) 推荐(0)
摘要:// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 #include <cstdio> void PrintMatrixInCircle(int** numbers, int columns, int rows, int start); vo 阅读全文
posted @ 2020-03-29 11:44 源周率 阅读(125) 评论(0) 推荐(0)
摘要:// 面试题28:对称的二叉树 // 题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和 // 它的镜像一样,那么它是对称的。 #include <cstdio> #include "BinaryTree.h" bool isSymmetrical(BinaryTreeNode* 阅读全文
posted @ 2020-03-27 23:17 源周率 阅读(111) 评论(0) 推荐(0)
摘要:// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 #include <cstdio> #include "BinaryTree.h" #include <stack> void MirrorRecursively(BinaryTreeNode* pNo 阅读全文
posted @ 2020-03-27 22:58 源周率 阅读(133) 评论(0) 推荐(0)
摘要:// 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 #include <cstdio> struct BinaryTreeNode { double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pR 阅读全文
posted @ 2020-03-27 14:42 源周率 阅读(141) 评论(0) 推荐(0)
摘要:// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的。例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 // 表3所示。 #include <cstdio> #include "List.h" ListN 阅读全文
posted @ 2020-03-27 11:06 源周率 阅读(138) 评论(0) 推荐(0)
摘要:// 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点。 #include <cstdio> #include "List.h" ListNode* ReverseList(ListNode* pHead) { ListNode* pR 阅读全文
posted @ 2020-03-26 23:42 源周率 阅读(141) 评论(0) 推荐(0)
摘要:// 面试题23:链表中环的入口结点 // 题目:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, // 环的入口结点是结点3。 #include <cstdio> #include "list.h" ListNode* MeetingNode(ListNode* pHead) { 阅读全文
posted @ 2020-03-26 22:32 源周率 阅读(141) 评论(0) 推荐(0)
摘要:// 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点, // 从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是 // 值为4的 阅读全文
posted @ 2020-03-26 00:51 源周率 阅读(158) 评论(0) 推荐(0)
摘要:// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分。 #include <cstdio> void Reorder(int* pData, unsigned int 阅读全文
posted @ 2020-03-25 22:23 源周率 阅读(159) 评论(0) 推荐(0)
摘要:// 面试题20:表示数值的字符串 // 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如, // 字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、 // “1a3.14”、“1.2.3”、“+-5”及“12e+5.4” 阅读全文
posted @ 2020-03-25 16:20 源周率 阅读(157) 评论(0) 推荐(0)
摘要:// 面试题19:正则表达式匹配 // 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.' // 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题 // 中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a" // 和" 阅读全文
posted @ 2020-03-25 15:16 源周率 阅读(179) 评论(0) 推荐(0)
摘要:// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示。 #include <cstdio> #include "list.h" void DeleteDuplication(Li 阅读全文
posted @ 2020-03-24 23:01 源周率 阅读(194) 评论(0) 推荐(0)
摘要:// 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点。 #include <cstdio> #include "List.h" void DeleteNode(ListNode** pListHead, Li 阅读全文
posted @ 2020-03-24 22:24 源周率 阅读(209) 评论(0) 推荐(0)
摘要:// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则 // 打印出1、2、3一直到最大的3位数即999。 #include <cstdio> #include <memory> void PrintNumber(char* number) 阅读全文
posted @ 2020-03-24 21:28 源周率 阅读(160) 评论(0) 推荐(0)
摘要:// 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方。不得使用库函数,同时不需要考虑大数问题。 #include <iostream> #include <cmath> bool 阅读全文
posted @ 2020-03-24 19:12 源周率 阅读(151) 评论(0) 推荐(0)
摘要:// 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如 // 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 #include <cstdio> int NumberOf1_Solution1(int n) { //主 阅读全文
posted @ 2020-03-23 23:19 源周率 阅读(132) 评论(0) 推荐(0)
摘要:// 面试题14:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。 // 每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘 // 积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三 阅读全文
posted @ 2020-03-23 22:32 源周率 阅读(252) 评论(0) 推荐(0)
摘要:// 面试题13:机器人的运动范围 // 题目:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和 // 大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18 阅读全文
posted @ 2020-03-23 17:33 源周率 阅读(170) 评论(0) 推荐(0)
摘要:// 面试题12:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、 // 上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入 // 该格子。例如在下面的3×4的 阅读全文
posted @ 2020-03-23 16:17 源周率 阅读(162) 评论(0) 推荐(0)
摘要:// 面试题11:旋转数组的最小数字 // 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 // 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 // {3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 #in 阅读全文
posted @ 2020-03-23 09:35 源周率 阅读(157) 评论(0) 推荐(0)
摘要:// 面试题10:斐波那契数列 // 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。 #include <cstdio> // 方法1:递归 //存在函数调用导致栈溢出的可能, 效率低, 时间复杂度指数递增 long long Fibonacci_Solution1(uns 阅读全文
posted @ 2020-03-22 19:56 源周率 阅读(178) 评论(0) 推荐(0)
摘要:// 面试题9:用两个栈实现队列 // 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 #pragma once #include <stack> #include <excep 阅读全文
posted @ 2020-03-22 16:08 源周率 阅读(242) 评论(0) 推荐(0)
摘要:// 面试题8:二叉树的下一个结点 // 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? // 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。 #include <stdio.h> struct BinaryTreeNode { int m_n 阅读全文
posted @ 2020-03-21 22:33 源周率 阅读(123) 评论(0) 推荐(0)
摘要:// 面试题7:重建二叉树 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输 // 入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1, // 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则 阅读全文
posted @ 2020-03-18 17:18 源周率 阅读(132) 评论(0) 推荐(0)
摘要:// 面试题6:从尾到头打印链表 // 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 //此处注意导入顺序 #include <stack> #include "List.h" void PrintListReversingly_Iteratively(ListNode* pHea 阅读全文
posted @ 2020-03-17 15:24 源周率 阅读(129) 评论(0) 推荐(0)
摘要:// 面试题5:替换空格 // 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”, // 则输出“We%20are%20happy.”。 #include <cstdio> #include <cstring> /*length 为字符数组str的总 阅读全文
posted @ 2020-03-16 23:45 源周率 阅读(146) 评论(0) 推荐(0)
摘要:// 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组中是否含有该整数。 #include <cstdio> bool Find(int* ma 阅读全文
posted @ 2020-03-15 22:27 源周率 阅读(150) 评论(0) 推荐(0)
摘要:// 面试题3(二):不修改数组找出重复的数字 // 题目:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至 // 少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的 // 数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那 阅读全文
posted @ 2020-03-15 17:36 源周率 阅读(272) 评论(0) 推荐(0)
摘要:// 面试题3(一):找出数组中重复的数字,可修改数组 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 阅读全文
posted @ 2020-03-15 10:12 源周率 阅读(192) 评论(0) 推荐(0)