DFS
树形
-
【offer 07】重建二叉树:前序+中序复原二叉树
-
【98】验证二叉搜索树
-
func isValidBST(root *TreeNode) bool { return judge(root,math.MinInt,math.MaxInt) } func judge(root *TreeNode,minn,maxx int) bool{ if root == nil{ return true } if root.Val<=minn || root.Val>=maxx{ return false } return judge(root.Left, minn,root.Val) && judge(root.Right, root.Val, maxx) }
-
-
二叉树的最近公共祖先:返回值记录查找到的个数+答案
-
看左右儿子,分别有几个待查找节点
-
左或右有两个:直接 返回2,儿子
-
左+右=2:返回2,自己
-
看自己是不是
- 是:返回1+左+右,自己
- 否:返回左+右,自己
-
-
-
【109】有序链表转换二叉搜索树
-
【124】二叉树中的最大路径和、【543】二叉树的直径
- dfs查找以当前节点为中转的路径最大的长度
- ans = max(ans,root.Val+max(maxl,0)+max(0,maxr))
-
【offer 26】树的子结构
-
【122】路径总和
-
【101】对称二叉树
-
【104】二叉树的最大深度
-
【113】路径总和 II:dfs记录根节点到当前节点的值的和
-
【129】求根节点到叶节点数字之和
-
【297】二叉树的序列化与反序列化:dfs遍历,空值填*占位
-
【386】字典序排数:想象在一个Trie树上dfs搜索
-
【426】将二叉搜索树转化为排序的双向链表、【offer 36】二叉搜索树与双向链表
-
【offer 33】二叉搜索树的后序遍历序列
-
【offer 34】二叉树中和为某一值的路径
-
【offer 32】从上到下打印二叉树 III
一维
-
【22】括号生成:递归限制:左括号数不大于全长的一半,右括号数<=左括号数
-
全排列:标准dfs
-
【78】子集
-
【93】复原 IP 地址:一个字符串,输出所有可能的IP地址
- dfs:记录tmp长度、分隔次数,停止条件:用了所有字母、切分了四次。注意每次加入1、2、3位数符合0~255
-
【131】分割回文串:dfs枚举是否可以分割
-
【39】组合总和:从小到大枚举保持顺序进行去重
-
【40】组合总和 II,枚举每一个数选、不选,注意去重
-
【47】全排列 II:注意去重,相同的数前面的有没用的就不能用后面的:
i>0 && nums[i]==nums[i-1] && m[i-1]==false就跳过
-
【77】组合:枚举每一个数选、不选,注意去重(从小到大枚举)
-
【394】字符串解码:遇到左括号,找到字串,递归得到结果,再重复tmp次
-
【offer 38】字符串的排列:标准dfs求全排列
二维空间
- 【695】岛屿的最大面积
- 【329】矩阵中的最长递增路径:dfs+状态记忆
- 【51】N 皇后
- 【offer 12】矩阵中的路径