数据结构
皮皮go
无问西东
展开
-
如何判断一棵树是否是平衡二叉树
1.定义平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树2.代码实现public boolean IsBalanced_Solution(TreeNode root) { if(root == null)return true; return isBalanceTree(root.left) && isBal...原创 2019-07-09 10:46:37 · 447 阅读 · 0 评论 -
手写一个队列
队列具有先进先出的特点,从队尾添加元素,从队首删除元素。对于队列,通常有两种实现方式:数组和链表。1 利用数组来实现队列利用两个指针font,rear分别指向队列的头部与尾部 为了能够有效利用数组空间,采用循环队列的方式去实现。 入队时,元素添加到rear指针处,然后real指针后移一位 出队时,删除并返回font指针所指元素,然后font指针后移一位 入队时,需要判断...原创 2019-09-29 16:23:42 · 959 阅读 · 0 评论 -
手写一个单向链表
主要包括单向链表的插入与删除操作package leetcode.list;/** * @基本功能:手写一个单链表 * @program:summary * @author:peicc * @create:2019-08-17 11:45:53 **/public class LinkList { ListNode head;//头结点 ListNode ...原创 2019-09-27 16:39:51 · 781 阅读 · 0 评论 -
手写一个二叉查找树
对二叉查找树的增删改查进行了java实现package basicKnowledge.tree;/** * @基本功能:二叉搜索树(二叉排序树) * @program:summary * @author:peicc * @create:2019-07-24 16:52:29 **/public class BinarySearchTree<AnyType ext...原创 2019-09-24 11:48:55 · 268 阅读 · 0 评论 -
二叉树的遍历(递归、非递归)
二叉树的前中后遍历递归、非递归实现,以及层序遍历,根据前中构建二叉树原创 2019-09-09 18:40:55 · 124 阅读 · 0 评论 -
链表反转
package leetcode.list;/** * @基本功能:反转链表 * @program:summary * @author:peicc * @create:2019-08-17 12:00:59 **/public class ListReverse { public static void main(String[] args) { Link...原创 2019-06-05 12:24:42 · 121 阅读 · 0 评论 -
图的存储以及遍历
本文主要对图的两种遍历方式进行讲解以及java实现1 图的存储方式1.1 邻接矩阵图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中的顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。1.2 邻接表利用一个一维数组存储图的顶点,与顶点相邻的结点则通过链表的形式连接起来。在顶点数组中,每个元素不仅存储数值信息,还需要存储指向第一个邻接点的指针。(...原创 2019-09-06 20:06:06 · 1782 阅读 · 0 评论 -
单调栈与单调队列详解
单调栈1 定义单调栈:栈内元素单调递增或者单调递减的栈。那么有人会有疑问了:对于单调递增栈来说,到底是栈底到栈顶单调递增还是栈顶到栈底单调递增呢?都可以,取决于你怎么去定义。这不是重点,重点是你对单调栈性质的理解以及其应用。本文对单调栈的定义是根据栈底到栈顶元素的性质。2 性质栈内元素单调递增或者单调递减。(这貌似是一句废话)单调栈很好构建,难的是如何根据问题对在构...原创 2019-09-02 14:55:27 · 339 阅读 · 0 评论 -
手写一个优先队列(PriorityQueue)
实现了优先队列的添加与删除方法优先队列利用最小堆来实现 主要方法:删除堆顶元素、添加元素后最小堆的维护代码实现package basicKnowledge.集合框架.priorQueue;import basicKnowledge.集合框架.queue.MyListQueue;import com.sun.xml.internal.bind.v2.schemagen.x...原创 2019-08-19 17:44:26 · 1270 阅读 · 0 评论 -
剑指Offer:重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路分析 该题型属于根据二叉树的前序和中序遍历,写出二叉树的后续遍历类似 根据前序遍历,可以判断根节点 根据中序遍...原创 2019-07-25 15:53:25 · 108 阅读 · 0 评论 -
斐波那契数列求解以及时间空间复杂度分析
1 斐波那契数列定义斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(...原创 2019-07-30 11:06:12 · 2225 阅读 · 0 评论 -
Java集合之fail-fast
1 fail-fast简介fail-fast是java集合(Collection)的一种错误机制 当多个线程对同一个集合的内容进行操作时,就可能产生fail-fast事件2 代码测试package basicKnowledge.集合框架.arrayList;import java.util.ArrayList;import java.util.Iterator;/*...原创 2019-07-19 16:42:11 · 218 阅读 · 0 评论 -
利用两个栈实现一个队列
要想解决这个问题,我们首先需要明白栈和队列的特点。栈,先进后出;队列,先进先出 当我们将所有元素入栈后,如何获取最先入栈的元素呢?此时,如果我们可以将栈中的元素倒置,就可以得到我们想要的结果。两种方法,第一种就是在入栈的时候将入栈元素保留一份副本,这种操作很麻烦,而且如何需要出栈还需要其他的辅助标识。第二种方法就是,将已入栈的元素全部倒出来,放入另一个容器中,而且这个容器能将之前栈中的元素...原创 2019-10-07 15:34:50 · 384 阅读 · 0 评论