给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
题解:
递归法:
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func maxDepth(root *TreeNode) int {
maxDepth := 0
var order func(node *TreeNode, depth int)
order = func(node *TreeNode, depth int) {
if node == nil {
return
}
if depth > maxDepth-1 {
maxDepth = depth + 1
}
order(node.Left, depth+1)
order(node.Right, depth+1)
}
order(root, 0)
return maxDepth
}
使用队列解决:
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
maxDepth := 0
queue := list.New()
queue.PushBack(root)
for queue.Len() > 0 {
length := queue.Len()
for i := 0; i < length; i++ {
node := queue.Remove(queue.Front()).(*TreeNode)
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
maxDepth++
}
return maxDepth
}
评论前必须登录!
注册