数据结构
带刀少年ha
这个作者很懒,什么都没留下…
展开
-
相交链表
编写一个程序,找到两个单链表相交的起始节点。相交为8法一:让两个链表都入栈,在把两个栈出栈对比,如果相等就刷新记录,不等不刷新记录,跳出循环即可,这应记录的就是相交的节点。public ListNode getIntersectionNode(ListNode headA, ListNode headB){ Stack<ListNode> stac...原创 2019-04-21 09:43:19 · 170 阅读 · 0 评论 -
二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].这个特别像二叉树的广度优先遍历,如果忘了可以看看Java 二叉树,深度优先遍历,...原创 2019-04-28 14:36:12 · 299 阅读 · 0 评论 -
修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L和最大边界R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2示例 2:输入: ...原创 2019-04-28 14:19:17 · 256 阅读 · 0 评论 -
把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / ...原创 2019-04-28 13:45:26 · 210 阅读 · 0 评论 -
叶子相似的树
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个叶值序列。举个例子,如上图所示,给定一颗叶值序列为(6, 7, 4, 9, 8)的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是叶相似的。如果给定的两个头结点分别为root1和root2的树是叶相似的,则返回true;否则返回false。思路:深度优先搜索,递归,找到叶子...原创 2019-04-28 11:01:51 · 143 阅读 · 0 评论 -
链表的中间结点
给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans...原创 2019-04-28 10:23:13 · 197 阅读 · 0 评论 -
二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.这个与 二叉树的最大深度 不同,需要考虑如图的情况。publi...原创 2019-04-22 22:40:23 · 146 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。示例 2:给定二叉树[1,2,2,3,3,null,nu...原创 2019-04-22 22:10:49 · 113 阅读 · 0 评论 -
二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。public int maxDepth(TreeNode root) { ...原创 2019-04-22 21:44:36 · 117 阅读 · 0 评论 -
最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。 pop()-- 删除栈顶的元素。 top()-- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.pus...原创 2019-04-27 09:45:31 · 104 阅读 · 0 评论 -
路径总和(二叉树)
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...原创 2019-04-27 08:38:21 · 1244 阅读 · 0 评论 -
链表去重
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode deleteDu...原创 2019-03-29 22:25:36 · 661 阅读 · 0 评论 -
构建二叉树
二叉树的前序遍历123456 ,中序遍历321546 ,构建二叉树从前序遍历知道根节点,从中序遍历划分左右子树,然后从前序遍历知道子树的根节点,从中序遍历知道子树的左右子树,以此类推,直到全部构建完。/** * 二叉树节点类 */ public static class BinaryTreeNode { int value; B...原创 2019-03-26 18:58:34 · 4119 阅读 · 1 评论 -
二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。/** * 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树) *...原创 2019-03-31 13:43:04 · 142 阅读 · 0 评论 -
完全二叉树的节点个数
用递归思路很清晰/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solut...原创 2019-03-20 09:05:18 · 5544 阅读 · 0 评论 -
Java 二叉树,深度优先遍历,广度优先遍历
二叉树的深度优先遍历,可以使用栈,因为栈有后进先出的特性,二叉树的广度优先遍历,可以使用队列来实现。package sjjg;import java.util.ArrayDeque;import java.util.Deque;import java.util.Stack;public class Tree1 { public static void main(S...原创 2019-04-09 20:32:28 · 284 阅读 · 0 评论 -
将有序数组转换为高度平衡的二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -1...原创 2019-04-14 20:59:11 · 241 阅读 · 0 评论 -
二叉树的坡度
给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。整个树的坡度就是其所有节点的坡度之和。示例:输入: 1 / \ 2 3输出: 1解释: 结点的坡度 2 : 0结点的坡度 3 : 0结点的坡度 1 : |2-3| = 1树的坡度...原创 2019-04-28 22:10:02 · 607 阅读 · 2 评论