8-树-二叉树的最大深度

这是树的第8篇算法,力扣链接

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

这道题还是可以用层级遍历来解,每一层count++即可。

func maxDepth(root *TreeNode) int {
	count := 0
	if root == nil {
		return count
	}
	queue := []*TreeNode{root}
	for len(queue) > 0 {
		count++
		newQueue := []*TreeNode{}
		for _, node := range queue {
			if node.Left != nil {
				newQueue = append(newQueue, node.Left)
			}
			if node.Right != nil {
				newQueue = append(newQueue, node.Right)
			}
		}
		queue = newQueue
	}
	return count
}

当然,也可以深度优先遍历,递归的方式:

func maxDepth(root *TreeNode) int {
	if root == nil {
		return 0
	}
	left, right := maxDepth(root.Left), maxDepth(root.Right)
	if left > right {
		return left + 1
	} else {
		return right + 1
	}
}

迭代的方法也能做,不过要构建新对象记录深度。

func maxDepth(root *TreeNode) int {
	if root == nil {
		return 0
	}

	// 定义一个栈,用于存储节点以及对应的深度
	type StackNode struct {
		Node  *TreeNode
		Depth int
	}

	// 初始化栈,先将根节点入栈
	stack := []StackNode{{Node: root, Depth: 1}}
	maxDepth := 0

	// 当栈不为空时,循环执行
	for len(stack) > 0 {
		// 出栈
		current := stack[len(stack)-1]
		stack = stack[:len(stack)-1]

		// 如果当前节点的深度大于已记录的最大深度,则更新最大深度
		if current.Depth > maxDepth {
			maxDepth = current.Depth
		}

		// 将当前节点的子节点入栈,深度为当前节点深度加1
		if current.Node.Left != nil {
			stack = append(stack, StackNode{Node: current.Node.Left, Depth: current.Depth + 1})
		}
		if current.Node.Right != nil {
			stack = append(stack, StackNode{Node: current.Node.Right, Depth: current.Depth + 1})
		}
	}

	// 返回记录的最大深度
	return maxDepth
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值