随笔分类 - 1. 剑指offer
《剑指offer》面试题
摘要:// 面试题36:二叉搜索树与双向链表 // 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求 // 不能创建任何新的结点,只能调整树中结点指针的指向。 #include <cstdio> #include "BinaryTree.h" void ConvertNode(Bin
阅读全文
摘要:// 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个 // 结点外,还有一个m_pSibling 指向链表中的任意结
阅读全文
摘要:// 面试题34:二叉树中和为某一值的路径 // 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所 // 有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 #include <cstdio> #include "BinaryTree.h" #include <
阅读全文
摘要:// 面试题33:二叉搜索树的后序遍历序列 // 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 // 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 #include <cstdio> // BST:Binary Search Tree,
阅读全文
摘要:// 面试题32(三):之字形打印二叉树 // 题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺 // 序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, // 其他行以此类推。 #include <cstdio> #include "BinaryTree.
阅读全文
摘要:// 面试题32(二):分行从上到下打印二叉树 // 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层 // 打印到一行。 #include <cstdio> #include "BinaryTree.h" #include <queue> void Print(BinaryT
阅读全文
摘要:// 面试题32(一):不分行从上往下打印二叉树 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 #include <cstdio> #include "BinaryTree.h" #include <deque> void PrintFromTopToBottom
阅读全文
摘要:// 面试题31:栈的压入、弹出序列 // 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是 // 否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、 // 5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但 // 4、3、5、
阅读全文
摘要:// 面试题30:包含min函数的栈 // 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min // 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 #pragma once #include <stack> #include <assert.h> //
阅读全文
摘要:// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 #include <cstdio> void PrintMatrixInCircle(int** numbers, int columns, int rows, int start); vo
阅读全文
摘要:// 面试题28:对称的二叉树 // 题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和 // 它的镜像一样,那么它是对称的。 #include <cstdio> #include "BinaryTree.h" bool isSymmetrical(BinaryTreeNode*
阅读全文
摘要:// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 #include <cstdio> #include "BinaryTree.h" #include <stack> void MirrorRecursively(BinaryTreeNode* pNo
阅读全文
摘要:// 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 #include <cstdio> struct BinaryTreeNode { double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pR
阅读全文
摘要:// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的。例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 // 表3所示。 #include <cstdio> #include "List.h" ListN
阅读全文
摘要:// 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点。 #include <cstdio> #include "List.h" ListNode* ReverseList(ListNode* pHead) { ListNode* pR
阅读全文
摘要:// 面试题23:链表中环的入口结点 // 题目:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, // 环的入口结点是结点3。 #include <cstdio> #include "list.h" ListNode* MeetingNode(ListNode* pHead) {
阅读全文
摘要:// 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点, // 从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是 // 值为4的
阅读全文
摘要:// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分。 #include <cstdio> void Reorder(int* pData, unsigned int
阅读全文
摘要:// 面试题20:表示数值的字符串 // 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如, // 字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、 // “1a3.14”、“1.2.3”、“+-5”及“12e+5.4”
阅读全文
摘要:// 面试题19:正则表达式匹配 // 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.' // 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题 // 中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a" // 和"
阅读全文

浙公网安备 33010602011771号