随笔分类 - 数据结构 & 算法
1
摘要:归并排序 左部分有序 > 右部分有序 > 整体有序 查看代码 // https://leetcode.cn/problems/sort-an-array/ import java.util.Arrays; class Solution { public static final int MAX_N
阅读全文
摘要:1. 二叉搜索树 1.1 二叉搜索树概念 若左子树不为空,则左子树上所有节点的值都小于根节点的值 若右子树不为空,则右子树上所有节点的值都大于根节点的值 如果中序遍历( 左根右 ),结果从小到大有序。所以,二叉搜索树也叫二叉排序树 1.2 二叉搜索树的实现 class BinarySearchTre
阅读全文
摘要:1)在有序数组中确定num存在还是不存在 public class FindNumber { // 在一个有序数组中找是否存在num public static boolean exist(int[] arr,int num) { int l = 0, r = arr.length-1, m = 0
阅读全文
摘要:1. 什么是堆 ? 2. 完全二叉树和数组前缀范围的对应 任何节点 i 的父亲节点 = (i - 1) / 2,i 的左孩子 = i * 2 + 1,i 的右孩子 = i * 2 + 2 单独的变量size 来控制堆的大小, i * 2 + 1 < size 有左孩子、i * 2 + 2 < siz
阅读全文
摘要:实现 1. 前序遍历 public void preOrderNor(TreeNode root) { if (root == null) { return; } Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!sta
阅读全文
摘要:二叉树面试题进阶 1. 二维数组存储层序遍历结果 难点: 如何存储每一层的节点 ?根据队列节点的个数判断每一层 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> re
阅读全文
摘要:创建二叉树 1. 前序遍历创建二叉树 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 class TreeNode { public TreeNode left; public char val; public Tree
阅读全文
摘要:二叉树基本操作 1. 获取二叉树中节点个数 计数器思路: public int nodeNum; public void size1(TreeNode root) { if (root == null) { return; } this.nodeNum++; size1(root.left); si
阅读全文
摘要:二叉树入门题 1. 判断两颗树是否相同 class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { // 如何判断两颗树是否相同? 根相同 + 左右子树相同 // 如何判断根相同? 结构 + 值相同 if (p == nu
阅读全文
摘要:1. 二叉树结构 2. 二叉树节点遍历顺序 前序: 每颗子树以 中 —》左 —》右 遍历 A B D E H C F G 中序: 每颗子树以 左 —》中 —》右 遍历 D B E H A F C G 后序: 每颗子树以 左 —》右 —》中 遍历 D H E B F G C A 代码实现: publi
阅读全文
摘要:二进制与位运算 1)二进制和位的概念 十进制: 103 103 = 10^0 × 3 + 10^1 × 0 + 10^2 × 1 2)负数怎么用二进制表达 3)为什么这么设计负数 (为了加法的逻辑是一套逻辑,没有条件转移),那么为啥加法逻辑如此重要呢? (未理解) 4)打印二进制;直接定义二进制、十
阅读全文
摘要:二叉树面试题解析 判断相同的树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tre
阅读全文
摘要:1. 树的基本概念 与数组链表不同,树是一种非线性的存储结构,它由n (n>=0) 个节点构成 并具有层次关系的存储结构 把这个存储结构叫做树 是因为它看上去像一颗倒挂着的树,只是根在上 叶子在下 它有以下特性: 1. 有一个特殊的结点,称为根结点,根结点没有前驱结点 2. 树是由若干不相交的子树组
阅读全文
摘要:1. 队列概念及结构 队列一种先进先出的数据结构, 先入队列的数据先出队列 单链表能实现队列 ? 所以以原来的单链表无法用来实现队列, 如何修改 ? 只需再加个last引用指向尾,这样尾插入队操作复杂度就能达到O(1) 但是需要注意: 这种结构的单链表只能头插实现出队 尾插实现入队, 不能头插实现入
阅读全文
摘要:1. 栈的概念及实现 栈是一种先进后出的数据结构,先进后出是指最先入栈的数据最后出栈,最后入栈的数据最先出栈, 如下图 栈的实现: https://github.com/znxcmakhsd/DS/tree/main/12-18/MyStack 这个栈的实现底层用数组存储数据 栈也可以用单链表或者是
阅读全文
摘要:1. 链表概念 使用数组存储数据的缺陷: 插入和删除需要移动数据 复杂度为O(N) 不好 那么,是否有一种存储结构 可以在插入删除数据时不需要移动数据 ? 答案是链表 什么是链表 ? 链表是一种在逻辑上连续存储 但是在物理上(内存空间)中不一定连续的存储结构, 如下图 链表中的每一个元素都是一个节点
阅读全文
摘要:链表面试题解析 1. 删除链表中=val的所有节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(in
阅读全文
摘要:1. 顺序表概念 什么是顺序表 ? 顺序表是一种新的数据类型,它使用一段物理地址连续的存储单元依次存储数据元素(数组实现),并具有操作(增删查改)这个数组的方法 数组也是使用连续的地址空间存储数据,那么数组和顺序表有什么区别 ? 数组是一个连续地址依次存储数据的简单结构, 而顺序表只是使用数组这个结
阅读全文
摘要:1.1 时间复杂度概念 如何衡量一个算法的好与坏 ? public static long Fib(int N){ if(N < 3){ return 1; } return Fib(N-1) + Fib(N-2); } 比如,如何判断 上面这个递归解斐波那契数列 算法的好坏 ? 判断一个算法好
阅读全文
1