
链表与树
链表与树
小白太白
一起进步,目前所有文章均为免费开放
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Prim最小生成树算法
Prim最小生成树算法适用情况以点为主线贪心搜索,适合与稠密图。时间复杂度为 O()思想①【初始化(最短距离)】将所有的点分成两个集合,一个是已经被选上的点集(默认有一个起始点);另一个是待选点集。用一个数组存源点到其他所有点的最短距离(即最小花费)②【找最近点】循环 n-1 次(用上所有的点找最小的花费)找点的时候,每次从没被选上的点集中找到一个点,该点满足是到被选...原创 2019-04-11 16:59:45 · 220 阅读 · 0 评论 -
sum-root-to-leaf-numbers[根到叶节点路径之和]
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.An example is the root-to-leaf path 1->2->3 which represents the number 123.Find the total...原创 2019-08-18 14:34:43 · 124 阅读 · 0 评论 -
merge-k-sorted-lists[合并链表]
题目描述Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.思路按顺序合并所有的链表并返回头结点。法一:优先队列存储所有的链表头结点,每次取最小值连接并使它的下一个加入到队列中。法二:从第一个链表开始依次合并后再返回头结点。//法一/...原创 2019-08-13 14:28:41 · 167 阅读 · 0 评论 -
validate-binary-search-tree[判断二叉搜索树]
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key.The ri...原创 2019-08-19 10:47:54 · 145 阅读 · 0 评论 -
convert-sorted-array-to-binary-search-tree[转换平衡二叉树]
题目描述Given an array where elements are sorted in ascending order, convert it to a height balanced BST.思路给定一个升序数组,转换为平衡二叉树。每次取中间元素当做(子)树的根节点,然后分别把其他两部分当做左右子树的部分。注意当找中间元素时,当数组长度为2时需要将其下标加一(如代码所示)/...原创 2019-08-17 09:18:06 · 92 阅读 · 0 评论 -
scramble-string[子树互换位置相等性判断]
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.Below is one possible representation of s1 ="great":To scramble the string, w...原创 2019-08-18 13:51:45 · 86 阅读 · 0 评论 -
recover-binary-search-tree[恢复二叉搜索树]
题目描述Two elements of a binary search tree (BST) are swapped by mistake.Recover the tree without changing its structure.Note:A solution using O(n ) space is pretty straight forward. Could you devis...原创 2019-08-05 11:30:37 · 162 阅读 · 0 评论 -
partition-list[分割链表]
题目描述Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in each...原创 2019-08-04 09:28:30 · 142 阅读 · 0 评论 -
reverse-nodes-in-k-group[按组反转链表]
题目描述Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it...原创 2019-08-08 17:15:42 · 120 阅读 · 0 评论 -
remove-duplicates-from-sorted-list[链表去重]
题目描述Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example,Given1->2->3->3->4->4->5, return 1-...原创 2019-08-08 12:58:19 · 77 阅读 · 0 评论 -
linked-list-cycle[链表环判断]
题目描述Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?思路尽可能少的额外空间判断一个链表有无环。①快慢两种指针,如果中间相遇则存在环②把走过节点的下一个指向改变为head或者其他空间,如果再次访问到则为有环(无...原创 2019-07-19 23:54:23 · 148 阅读 · 0 评论 -
unique-binary-search-trees[不同BST组合]
题目描述(一)Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3, there are a total of 5 unique BST's.示例思路求节点值为1--n之间共可以构成多少个互不相等的...原创 2019-07-20 15:52:02 · 118 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目来源:剑指Offer思路将二叉排序树转换成一个排序的双向链表,则需要中序遍历(达到有序)并通过改变指针指向来构造双向链表。给定节点若为空则直接返回空,若为单一节点则直接返回原节点。该题实际上只需改变(左右子树节点)临界的指向。首先递归找到其左子树节点,然后找...原创 2019-07-14 14:12:40 · 84 阅读 · 0 评论 -
二叉树的下一个节点
题目描述给定一个二叉树的其中一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目来源:剑指Offer思路首先需要知道中序遍历下各位置节点的下一个节点在哪。①当给定的节点是父节点时,它的下一个节点是其右子树的最左节点(若无右子树则返回空);②当给定的节点是左节点时,它的下一个节点是其父节点;③当给定的节点是右节点时,...原创 2019-07-13 21:57:37 · 160 阅读 · 0 评论 -
序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树题目来源:剑指Offer思路二叉树序列化就是把二叉树结构转化为可以用字符串表示的文本形式反序列化就是把字符串形式的转化为二叉树。序列化:选定一种遍历方法,将中间为空的节点设置一个特殊符号,如'#'。中间加分隔符便于反序列化(也可用其他方法);反序列化:将设置的特殊符号返回为空节点,其他节点从存储的序列中取出实例化节点。//该代...原创 2019-07-15 16:00:39 · 199 阅读 · 0 评论 -
二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题目来源:剑指Offer思路从二叉搜索树中找第k小节点等价于将此树按中序排序后找第k个节点。非递归实现/*public class TreeNode { int val = 0; TreeNode left = null...原创 2019-07-15 18:32:10 · 66 阅读 · 0 评论 -
链表中环的入口
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题目来源:剑指Offer思路示例图.png如上图,设1--3即环之前的长度为x,3--6--3即环长度为c,第一次相遇点假设为4,则3--4即环入口到相遇点的距离为d,慢快指针走过环的圈数分别为n、m,其速度差是2倍(一个是一次一步,一个是一次两步)。设慢指针p1走到相遇点的路程为:x+n...原创 2019-07-14 16:14:17 · 119 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路定义一个初始为空的节点来使原有的链表反向指向它,并不断后移最后成为新链表的表头;同时设置一个中间节点来暂时保存当前操作的下一个节点(否则会连不下去)。当操作的当前节点即 head 不为空时,首先保存它的下一个节点,然后改变当前节点的指向,并使指向的前一个节点后移以便下次被继续指向。最后把当前节点后移到下一个节点的位置继续重复上一步...原创 2019-07-16 10:50:58 · 68 阅读 · 0 评论 -
求二叉树的深度和宽度
我之前学数据结构的时候对树相关的知识似懂非懂,直到现在才有勇气来一个一个克服相关的常见操作。除了树相关的操作还学到了一个类。参考的两篇博客,分别是 传送门① 和 传送门② 二叉树的深度思路:可以递归查找,当节点为空时返回0,然后分别求出左右节点孩子的深度,求最大值返回(根节点的深度还要加上)import java.util.ArrayDeque;import java.util...转载 2019-03-25 15:16:31 · 962 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路法一:每次判断当前树的左右子树高度差,然后判断子树的子树。法二:由于每次求子树的高度,导致很多节点被重复计算,因此在计算的过程中就应该判断是否符合平衡二叉树的性质。当高度返回-1时代表不是平衡二叉树,这样就实现了从下往上判断,且每个节点被计算一次。时间复杂度为O(n)//法一public class Solution { ...原创 2019-10-08 19:13:57 · 95 阅读 · 0 评论 -
删除链表中重复的节点
题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路设置两个指针,一个指向头结点的前一个(因为第一个也可能是重复节点),另一个指向第一个节点。然后比较第二个指针的当前值和下一个值(如果存在的话),若相等则一...原创 2019-04-18 20:48:49 · 210 阅读 · 0 评论 -
对称的二叉树
题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路参考博客:传送门判断其是否对称,首先需要判断其左右子树,若都为空则是对称的,若有一个为空并且一个不为空则是不对称的。然后比较其左右子树(经上述判断知其都已非空),当前左子树用L表示,右子树用R表示。若L的左子树等于R的右子树 并且 L的右子树等于R的左子树(因...转载 2019-04-18 19:46:43 · 133 阅读 · 0 评论 -
两个链表的第一个公共节点
题目输入两个链表,找出它们的第一个公共结点。思路参考博客:传送门若存在这样公共节点,那个两个链表的结构应该是一个“Y”字形的,最后交于一条链表。法一:从一个链表的节点开始遍历,对遍历到的节点再遍历另一个链表,直到相等;法二:两个链表都从最后一个节点开始遍历,找到最后一个相同的节点即为所求。(用栈存储来实现单链表不能倒序查询的缺点)法三:遍历每个链表求出其长度。把较长的...转载 2019-04-18 18:15:14 · 112 阅读 · 0 评论 -
树的子结构
题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路由题意知当任意一棵树为空时都返回false。然后比较树结构,分别是A与B比较,A的左子树与B比较,A的右子树与B比较。满足一个为true即为子结构。在递归查找中,如果B为空,说明已经匹配完了则返回true;接着判断A,若为空则说明在此子树上没有成功匹配B。最后根据当前树节点的...原创 2019-04-07 14:14:46 · 114 阅读 · 0 评论 -
链表中倒数第k个节点
题目输入一个链表,输出该链表中倒数第k个结点。思路刚开始想的是先遍历一遍得出总节点数,然后算出第k个在正数哪个位置(不放代码了)。后来过了看评论区发现了更好的思路。设置两个标记节点,一个节点 la 先走 k-1 步,这样另一节点 lb 此刻就处于倒数 k 个位置(相对于 la)。所以只要使得 la 节点到最后一个节点,那么 lb 就是绝对的倒数第 k 个节点。/*pub...原创 2019-04-06 17:42:19 · 147 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路根据二叉搜索树的后序序列特点:由于最后一位是根节点,所以当序列不包含根节点时,可将序列分为两部分。一部分是左子树、一部分是右子树。左半部分的值都不大于根节点,右半部分的值都不小于根节点,得到的每个序列同理。public class So...转载 2019-04-05 11:38:19 · 127 阅读 · 0 评论 -
重建二叉树
题目给出某二叉树的前序遍历和中序遍历结果(或者中序遍历和后序遍历结果),重建二叉树。分析前序遍历:先根节点,然后左子树、右子树中序遍历:中间根节点,先左子树,最后右子树后序遍历:最后根节点,先左子树,然后右子树根据前序遍历和中序遍历重构二叉树:根据前序遍历序列,第一个元素为根节点。然后观察中序遍历结果,根节点左边的为左子树,右边的为右子树。递归查找即可重构二叉树。根...原创 2019-03-31 17:58:46 · 181 阅读 · 0 评论 -
二叉树中和为某一值的路径(+链表复制)
题目输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路从根节点一一遍历判断即可。注:代码后有链表的复制操作import java.util.ArrayList;/**public class TreeNode {...原创 2019-04-18 17:49:54 · 227 阅读 · 0 评论 -
复杂链表的复制
题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路参考博客(思路三):传送门第一步:把链表所有节点复制一遍,并接在对应原节点后面。第二步:设置random节点。即把复制节点的random指向与原节点对应...转载 2019-04-18 15:07:18 · 112 阅读 · 0 评论 -
算法训练 结点选择
算法训练 结点选择 时间限制:1.0s 内存限制:256.0MB问题描述有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?输入格式第一行包含一个整数 n 。接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。接下来一共 n-1 行,每行描述树上的一条边。输...转载 2019-05-01 17:27:16 · 933 阅读 · 0 评论