labuladong算法学习笔记一
1.核心套路
1.框架思维
整体到细节,自顶向下,抽象到具体
数据结构的存储方式
数据结构的底层存储方式只有两种:数组(顺序存储)和链表(链式存储)
数据结构的基本操作
对任何数据结构,基本操作无非就是遍历+访问,再具体一点就是增 删 改 查
各种数据额结构的遍历+访问无非就两种方式:线性和非线性
线性形式以for/while迭代为代表,非线性形式以递归为代表。
数据遍历框架时典型的线性迭代结构:
void trancerse(int[] arr){
for (int i = 0;i < arr.length;i++){
//迭代访问arr[i]
}
}
链表遍历框架,兼具迭代和递归结构:
/*基本的单链表节点*/
class ListNode{
int val;
ListNode next;
}
void traverse(ListNode head){
for(ListNode p = head; p != null; p = p.next){
//迭代遍历p.val
}
}
void traverse(ListNode head){
//前序遍历head.val
traverse(head.next);
//后序遍历head.val
}
二叉树遍历框架,是典型的非线性遍历结构:
/*基本的二叉树节点*/
class TreeNode{
int val;
TreeNode left, right;
}
void traverse(TreeNode root){