剑指offer
blank4569
-------------------
展开
-
[JZoffer]二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路将当前结点加入路径中,如果当前结点是叶结点,判断至当前结点的路径和是否符合条件,若符合则将路径加入最终结果。每一轮递归返回到父结点时,当前路径也应该回退一个结点。 代码# -*- coding:ut...原创 2018-05-19 17:34:06 · 167 阅读 · 0 评论 -
[JZoffer]树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路 将AB两个二叉树通过前序遍历成list数组, 然后通过遍历listA依次去找listA[i:len(listB)+i]与listB是否相同,相同即找到子结构,反之则为False; 其中还需要考虑AB其一为空的状态以及A==B的状态。代码# c...原创 2018-05-16 00:41:42 · 165 阅读 · 0 评论 -
[JZoffer]反转链表
反转链表题目描述输入一个链表,反转链表后,输出链表的所有元素代码 代码其实虽说看懂了,但是实现起来稍微还是有些困难,理解的不透彻,mark在这里,以备之后查看之# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass ...原创 2018-05-15 17:55:13 · 111 阅读 · 0 评论 -
合并两个有序链表
题目描述:合并两个已排序的链表,并将其作为一个新列表返回。新列表应该通过拼接前两个列表的节点来完成。 解题思路:构造一个新的链表空间,利用链表的next依次组合,不难,就是生疏了忘了链表看了下。代码:# Definition for singly-linked list.#class ListNode(object):# def __init__(self, x):# s...原创 2018-04-03 19:09:49 · 193 阅读 · 0 评论 -
[JZoffer]复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)代码# -*- coding:utf-8 -*-# class RandomListNode:# def __init__(self, x)...原创 2018-05-23 17:42:42 · 173 阅读 · 0 评论 -
[JZoffer]二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路 对于每个非子节点来说,他们的左节点是左子树中的最大值,也就是左子树中的最右节点;他们的右节点是右子树中的最小值,也就是右子树中的最左节点。 对于每个子节点来说,他们的父节点就是对应的他们的左节点或者右节点。 最后,我们需要找到双...原创 2018-05-23 21:17:06 · 202 阅读 · 0 评论 -
[JZoffer]数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路 求出每一个不重复的数组元素出现的次数,进行一个比较得到最大值,并与数组长度的一半进行比较,返回结果。代码实现# -*- cod...原创 2018-06-08 17:45:39 · 1366 阅读 · 0 评论