随笔分类 - 剑指Offer
摘要:题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入图4.12中左边的二叉搜索树,则输出转换之后的排序双向链表。二叉树结点的定义如下:题目分析剑指Offer(纪念版)P151代码实现BinaryTreeNode* Conv...
阅读全文
摘要:题目描述有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL,请完成函数ComplexListNode* Clone(ComplexListNode* pHead),以复制一个复杂链表。结点的定义如下:struct Comp...
阅读全文
摘要:题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:题目分析剑指Offer(纪念版)P143代码实现我们用标准模板库中的vector实现了一个栈来保存路径,这里没有直接用STL中的s...
阅读全文
摘要:题目描述输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。题目分析剑指Offer(纪念版)P140代码实现// BST:Binary Search Tree,二叉搜索树bool VerifySquence...
阅读全文
摘要:题目描述从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二叉树结点的定义如下:题目分析剑指Offer(纪念版)P137代码实现层序遍历void PrintFromTopToBottom(BinaryTreeNode* pRoot){ if(pRoot == NULL) ...
阅读全文
摘要:题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。题目分析剑指Offer(纪念...
阅读全文
摘要:题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。题目分析剑指Offer(纪念版)P132代码实现template void StackWithMin::push(const T& value){ ...
阅读全文
摘要:题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。题目分析剑指Offer(纪念版)P125代码实现前序遍历void MirrorRecursively(BinaryTreeNode *pNode){ if(pNode == NULL) return; if(pNode-...
阅读全文
摘要:题目描述输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:题目分析剑指Offer(纪念版)P117代码实现第一步,在树A中查找与根结点的值一样的结点,这实际上就是树的遍历。先序遍历:bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTree...
阅读全文
摘要:题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下:题目分析剑指Offer(纪念版)P114代码实现ListNode* Merge(ListNode* pHead1, ListN...
阅读全文
摘要:题目描述定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:题目分析剑指Offer(纪念版)P112代码实现ListNode* ReverseList(ListNode* pHead){ ListNode* pReversedHead = NULL; ...
阅读全文
摘要:题目描述输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。题目分析剑指Offer(纪念版)P107代码实现ListNod...
阅读全文
摘要:数组面试题3:二维数组中的查找 面试题8:旋转数组的最小数字 面试题14:调整数组顺序使奇数位于偶数前面 面试题20:顺时针打印矩阵 面试题29:数组中出现次数超过一半的数字 面试题30:最小的k个数 面试题31:连续子数组的最大和 面试题33:把数组排成最小的数 面试题36:数组中的逆序对 面试题...
阅读全文
摘要:题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。题目分析剑指Offer(纪念版)P102代码实现快速排序的思想:void ReorderOddEven_1(int *pData, unsigned int length){ ...
阅读全文
摘要:题目描述给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点。链表结点与函数的定义如下:题目分析剑指Offer(纪念版)P99代码实现void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if(!pLi...
阅读全文
摘要:题目描述输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。题目分析剑指Offer(纪念版)P94代码实现void Print1ToMaxOfNDigits_2(int n){ if(n <= 0) return; c...
阅读全文
摘要:题目描述实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。题目分析剑指Offer(纪念版)P90代码实现bool g_InvalidInput = false;double Power(d...
阅读全文
摘要:题目描述请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2。题目分析剑指Offer(纪念版)P78代码实现常规解法int NumberOf1_Solution1(int n){ int count = 0; ...
阅读全文
摘要:题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。题目分析剑指Offer(纪念版)P66代码实现int Min(int* numbe...
阅读全文
摘要:题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。template class CQueue{public: CQueue(void); ~CQueue(void); ...
阅读全文

浙公网安备 33010602011771号