跟《labuladong的算法小抄》学算法系列一

要注意学习的网站是这个:
https://labuladong.gitbook.io/algo/

1.

首先讲了一些数据结构的基础知识,包括有两种存储类型:数组(顺序存储),和链表(链式存储)
这些基础知识就不展开讲了,基本上学过数据结构的,都有所了解。

其中,印象比较深的就是,作者说了,对于大部分数据结构来说,基本操作就是遍历加访问,再者就是增删改查(我真觉得很有道理,对于原理的最基本解析)

2.

一些经典框架:(用线性和非线性作为区分)

2.1 数组遍历框架

void traverse(int[] arr){
    
    
for(int i=0;i<arr.length;i++)
{
    
    
//再开始迭代访问arr[i]
}
}

2.2链表遍历框架

class ListNode{
    
    
int val
ListNode next;
}
void traverse(ListNode head){
    
    
for(ListNode p=head;p!=null;p=p.next)
{
    
    
//再就是迭代访问p的值
}

//也可以递归的来
void traverse(ListNode head){
    
    
//在里面继续调用
traverse(head.next)
}

二叉树遍历框架,也就是非线性递归的

(线性就是那些for/while,而非线性就是那些调用函数的递归)

class TreeNode{
    
    
int val;
TreeNode left,right;
}
void traverse(TreeNode root){
    
    
traverse(root.left);
traverse(root.right);
}

然后在二叉树的基础之上,将二叉树框架扩展成为N叉树框架

N叉树框架

class TreeNode{
    
    
int val;
TreeNode[] children;//这里不只是有左边和右边,有很多个
}
void traverse(TreeNode root){
    
    
for(TreeNode child:root.children)//创建一个child是在那里里面的
traverse(child);
}

所以说,有了这些框架,就可以做各种各样的题目了(当然这个是理论上来说的,毕竟具体题目可比这个难多了。。。)

3

在算法刷题指南上,作者重点强调了,***先刷二叉树***这样一个很“特别”的建议。他说:“二叉树是最容易培养框架思维的,而且大部分算法技巧,本质上都是树的遍历问题
也就是三大遍历:前序,中序,和后序遍历。当然这也是大佬的说法,对于我这种小菜鸡来说,还是需要刷题才能明白。。
所以我也准备老老实实,先刷这些树分类的题目刷。

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/108713632