被算法暴捶的第一天-DFS

        本人从接触算法至此的第一个大难题:DFS+回溯+动态规划、很多题都是一知半解,简单总结就是:讲题一听就懂,答案一看就会,自己写一瞅就懵。被树折磨到半夜做梦都是二叉上挂着水果,痛定思痛,潜心修炼。今天是暴打二叉树的第一天:先从二叉树的递归开始。

        我对递归的理解是:重中之重!!!!!

        不单单是树图这些结构,很多算法思想也用到了递归。由于我以为我在本科阶段深深的理解到了递归的本质,(此处大笑三声)直到被leetcode的树、图、回溯、分治、动态规划暴打才让我如梦初醒。(意思就是一题不会,尬笑)

       今天也就是Today,lz要狠狠的啃下这块硬骨头~的同时,分享一下学习经过,也希望诸位能给些建议和指导,我让我室友给诸位看官磕一个。

        开始:先从DFS开始:

        先偷个模板DFS的模板:

DFS算法题的应用场景:

                1、二叉树有关问题

                2、需要从根节点遍历到末尾叶子节点

                3、(最大、最小)的深度、路径、节点...等等等等

DFS的思路:

                1、创建储存变量初始化当前结果

                2、设计递归函数

                        函数执行过程:

                                1、到达结尾,返回

                                2、未到达结尾,更新当前结果

上上上模板!!

func dfsTemelate(root *TreeNode) int{
	//来个存储当前结构的变量
	res := math.MinInt32 //这个看题目定义
	//再来个初始化当前结果变量
	start := 0 //这个也自己定义
	//给lz开始递归
	dfs(root,start)
	return res
}
func dfs(node *TreeNode, current int)  {
	//终止条件返回判断
	if (node == nil){
		return
	}
	//更新当前结果currentResult
	
	//若到达末尾叶子结点,进行最优结果更新
	if node.Left == nil && node.Right == nil{
		//update res
	}
	//左右递归
	dfs(node.Left, current)
	dfs(node.Right, current)
}

上上上练习!!!!!!!

        

func maxDepth(root *TreeNode) (res int) {
	//同样的来个存储结果的值

	//再来个初始的值
	start := 0
	var dfs func(*TreeNode, int)
	dfs = func(Node *TreeNode, deep int) {
		//是不是终止条件
		if Node == nil {
			return
		}
		//更新当前的deep
		deep++
		if Node.Left == nil && Node.Right == nil {
			if deep >= res {
				res = deep
			}
		}
		dfs(Node.Left, deep)
		dfs(Node.Right, deep)
	}
	//开始调用
	dfs(root, start)
	return res
}

完事完事!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值