leetcode中关于dfs解体思路Personal-Notes总思路不贪图运行时间最快,但算法复杂度需要尽可能低,思路要易于理解,代码要尽可能短。每条思路所对应的代码最好要形成模板。

String基本操作

s2 = \"shaunwei\"

s2[-3:] = \"wei\"

s2[5:8] = \"wei\"

s2.index('w') = 5 # 如果没找到,返回-1

链表

链表的技巧不多,主要是记忆操作顺序太繁琐。常见操作有翻转链表、删除节点、Dummy Node、快慢指针。

Tree遍历

DFS和BFS:前序、中序、后序。BFS用于广度优先搜索。

BST(左子树 < root < 右子树),使用中序遍历得到的是有序数组。

Stack & Queues

堆栈与DFS和BFS:Stack一般用来模拟DFS,但不如回溯简洁,Queue一般用来模拟BFS。

Infix Expression Evaluation

中缀到后缀转换:要点在于,为什么遇到计算符时要把优先级大于等于自己的运算符全部弹出?因为在后缀表达式里,他们放在前面就等于先去计算他们;栈在这里实际上就是起到一个保留运算符的作用。