剑-->offer
xiao-ren-wu
这个作者很懒,什么都没留下…
展开
-
不改变数组里的数据查找数组的重复值
题目二:不修改数组找出重复的数字 有一个长度为n+1的数组里的所有数字都在1~n这个范围内, 所以数组中至少有一个数字是重复的。 请找出数组中任意一个重复的数字,但不能修改输入的数组。 例如: 如果输入的长度为8的数组{2.3.5.4.3.2.6.7},那么对应输出重复的数字2或者3。 算法描述1: 1.排除不符合要求的数组,元素值。原创 2017-06-28 20:58:29 · 547 阅读 · 1 评论 -
二叉树中和为某一值的路径
题目: 输入一棵二叉树和一个整数,打印出二叉树和中节点值和为输入整数的所有路径,从树的根节点开始往下一直到叶子节点所经过的节点形成的一条路径。 输入的二叉树如图,输入的整数为22。 则打印两条路径: 10、12 10、5、7 思路:用前序遍历的方式访问某一个节点时,把该节点添加到路径上,并累加该节点的值,如果该节点为叶子节点并且累加的值正好为目标值,则输出该路径,如果原创 2017-11-29 10:38:09 · 234 阅读 · 0 评论 -
数的子结构
需求: 输入两颗二叉树A和B,判断B树是不是A树的子结构。如果是返回1,不是返回0。 思路 解决这个问题可以大致分为两步: 第一步:在树A中找到和树B的根节点的值一样的节点R, 第二步:判断树A中以R为根节点的子树是不是包含和树B一样的子结构。 因为在计算机中,如果两个浮点树判断大小会出现误差。不能直接写x==y 所以如果两个数的差值如果很小,那么我们就认为这两个数字是相等的。原创 2017-11-05 21:16:49 · 286 阅读 · 0 评论 -
蛇形打印二叉树
需求 请实现一个函数实现蛇形打印二叉树,即第一行从左到右的顺序打印,第二行从右到左顺序打印,第三行从左到右……. eg: 上图二叉树打印结果为: 8 10 6 5 7 9 11 思路: 按照蛇形打印二叉树需要两个栈,在打印某一层节点时,把下一层节点存储在另一个栈中,如果打印的是奇数层,则先保存左子节点,在保存右子节点,如果是偶数层,则先保存右原创 2017-11-04 23:14:20 · 2707 阅读 · 0 评论 -
从上到下打印二叉树
二叉树如图: 需求1 不分行从上到下打印二叉树 该事例打印结果为:8,6,10,6,7,9,11 思路: 每次打印一个节点的时候,如果该节点有子节点,那么就将子节点则吧该节点的子节点放到队列的末尾,接着到队尾的头部取出最早入队列的节点,重复前面的打印操作,直到队列中所有的元素都打印完毕。 如图: 队列的数据结构选择: 因为我们不知道二叉树最多一层的节点的节点个数,所以在这里用原创 2017-11-03 23:45:28 · 509 阅读 · 0 评论 -
判断一个序列是否是一棵二叉树的后序遍历序列(分治算法)
需求: 输入一个整数数组,判断该数组是不是某个二叉树的后序遍历的结果,如果是,返回1,否则返回0。 线索: 在后序遍历序列中,最后一个数字是当前二叉树的根节点,所以序列中的数字可以分为三部分,根,左子树,右子树,左子树的值都小于根节点,右子树的值都大于根节点,所以可以根据这个信息找到序列中左子树的长度,之后判断当前二叉树的右子树是否满足条件。如果满足条件,则开始分治,进一步判断左子树和右子树的原创 2017-11-02 22:17:36 · 743 阅读 · 0 评论 -
二叉树转换为双向链表
需求 输入一棵二叉搜索树,将该二叉树转换成一个排序的双向链表, (要求:不能创建任何新的节点只能调整树中指针的指向) 例如: 转换成双向链表后: 线索 在二叉搜索树中,左子树的值总是比根节点,右子树的值总是大于根节点,因此我们在将二叉搜索树变换成双向链表时,原先指向左子节点的指针调整为链表中指向前一个节点的指针,原先指向右子节点的指针调整为指向后一个节点的指针。 为了记录已经调原创 2017-11-02 13:14:37 · 1712 阅读 · 0 评论 -
二叉树对称问题
1.镜像二叉树: 如图: 需求:编写一个函数,传入一棵二叉树,将该二叉树变成他的镜像。 交换过程: 总结上面的过程:先前序遍历二叉树,如果是叶子节点,则两个兄弟节点就进行交换 。 实现:void mirrorRecurisively(BTNode *root){ if (!root){ return; } else{ BTNo原创 2017-10-09 20:50:31 · 567 阅读 · 1 评论 -
重建二叉树
需求:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。 假设:该二叉树没有重复数字。 遍历二叉树的规律 在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。 在中序遍历序列中,根节点的值在序列中间,左子树的节点的值位于根节点值的左边,而右子树的节点的值位于根节点的右边。 eg: 该二叉树如图: 根据前序遍历找到根节点,之后根据中序遍历确定该根节点的左子树原创 2017-09-30 23:33:35 · 207 阅读 · 0 评论 -
字符串替换
题目: 请实现一个函数,把字符串的每个空格替换成“%20”。 例如: 输入”We are Happy.”则输出”We%20are%20happy.”算法描述1: 1)利用循环,计算字符串长度(‘\0’也算),空格个数 2)更改后字符串的长度为:原长度+2*空格个数 将一根指针放到更改后字符串末尾的位置,另一根指针放到没有更改的字符串的末尾, 进行复制.原创 2017-07-06 17:30:12 · 338 阅读 · 0 评论 -
特殊二维数组数据查找
二维数组中的查找:在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列输入一这样的二维数组和整数,判断数组中是否含有改整数。例如: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 查找数字7 算法描述: 首先将指针放到第一行的最后一列原创 2017-06-28 22:03:21 · 259 阅读 · 0 评论 -
复杂链表的复制
问题: 请实现一个函数,复制一个复杂链表,在复杂链表中,每个节点除了有一个指向下一个节点的指针,还有一个指向该链表的任意节点的指针,或者该指针指向NULL。 eg: 复制该链表分为三步: 1.复制原始链表的任意节点,N并创建一个新的节点N’,在把节点连接到N的后面, 2.原始链表上的节点N的sibling指针指向S则,对应的复制节点的N’的silbing指针指向S的复制节点S’原创 2017-11-30 13:05:03 · 354 阅读 · 0 评论