摘要: 描述 操作给定的二叉树,将其变换为源二叉树的镜像。 算法思路 这道题采用的是自顶向下的递归 蓝色子树是已经完成交换的子树,绿色子树是即将进行交换的左子树,绿色子树右边的橙色子树是将要和绿色子树交换的子树 对于当前的 root 交换左右子树 交换之后如下 对于每个子树的左右子树重复上面第一步的操作,相 阅读全文
posted @ 2021-07-01 01:31 大菠萝侦探 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 基本思路 按照树 A 中每个节点的遍历顺序比较当前节点和 B 的根节点是否相同,如果相同就按照 B 的结构遍历他们的每个节点。 例子是题目所给的样例: A : {8,8,#,9,#,2,#,5} B : 阅读全文
posted @ 2021-07-01 00:47 大菠萝侦探 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 描述 输入一个链表,反转链表后,输出新链表的表头。 算法 因为链表结尾是 null,所以让 pre 的值是 null, p 就表示我们的头部 因为 p 的 next 成员马上就要指向 pre, 如果不保存 p 的下一个节点就会使其丢失,所以通过临时变量 t 保存它 让 P 的 next 成员指向 p 阅读全文
posted @ 2021-06-26 11:34 大菠萝侦探 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 算法 比较方便的做法是设置一个假的链表头 fake,而它的 next 指向的地址才是真正的表头,然后开始的时候将它作为 pre 指针。在循环中,每次都将要接入的新节点接到 pre 后面,然后更新 pr 阅读全文
posted @ 2021-06-23 16:39 大菠萝侦探 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 描述 输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 双指针法 用两个指针 left, right 指向头节点 把 right 指针后移 k 个位置 把 left, right 同时后移直到 right 到 阅读全文
posted @ 2021-06-22 21:01 大菠萝侦探 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 算法 题目要求图解: 具体的做法就是把每个数加入符合条件的数组,如下图,橙色代表奇数数组,绿色代表偶数数组,最后再合并两个数 阅读全文
posted @ 2021-06-22 20:31 大菠萝侦探 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。 实际上就是实现一个计算 a ^ b 的函数。 朴素算法 让 expo 阅读全文
posted @ 2021-06-20 22:09 大菠萝侦探 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 方法一:检查二进制每一位数字 我们通过右移操作消除第 i 位右边的数字,通过与 1 操作消除第 i 位左边的所有数字,对数字 n 重复32次这种操作就可以求得每一位的数字。 当我们要提取从右往左第3位数字时: 01101 阅读全文
posted @ 2021-06-19 20:15 大菠萝侦探 阅读(81) 评论(0) 推荐(0) 编辑