二叉树最大深度-DFS、BFS
发布于 2020-05-27 16:45
0x01 深度优先搜索-DFS
/**
* 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
} else {
left := maxDepth(root.Left)
right := maxDepth(root.Right)
return int(math.Max(float64(left),float64(right)) + 1)
}
}
0x02 广度优先搜索-BFS
/**
* 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
}
var queue []*TreeNode // 辅助队列
queue = append(queue, root) // 根节点入队
depth := 0 // 初始化深度为0
for len(queue) > 0 { // 当队列不为空时,循环以下操作
size := len(queue)//当前队列中元素个数size作为限定:当前层级中节点数量
for i := 0; i < size; i++ { // 遍历当前层级中的节点
s := queue[0] // 获取队首元素
queue = queue[1:] // 队首元素出队
if s.Left != nil { // 如果左子树不为空,左子树入队
queue = append(queue, s.Left)
}
if s.Right != nil { // 如果右子树不为空,右子树入队
queue = append(queue, s.Right)
}
}
depth++ // for循环结束后这一层级节点已经访问结束,深度加+1
}
return depth
}