题目要求
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
解题思想
这里我们要使用动态规划的思想,使用递归来实现,我们无法直接求得数的深度,所以就一步一步往下递归,当我们每一次到根节点的时候,返回值为1,返回上一层返回值通过比较,选择较大的一个+1,以此类推即可得到最大的值。
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
return max(maxDepth(root.Left), maxDepth(root.Right)) + 1
}
func max(a int,b int) int{
if a>b{
return a
}else{
return b
}
}
时间复杂度:O(n)O(n),其中 nn 为二叉树的节点个数。与方法一同样的分析,每个节点只会被访问一次。
空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)O(n)。