104. 二叉树的最大深度
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例
示例 1:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解题思路
思路
这题可以用层次遍历思路来求解(遍历完每一层,高度加1即可),可以参阅二叉树的层序遍历
实现
// 用数组实现个简单的队列功能
type Queue struct {
elements []*TreeNode
}
func NewQueue() *Queue {
return &Queue{elements: make([]*TreeNode, 0)}
}
func (q *Queue) Push(node *TreeNode) {
q.elements = append(q.elements, node)
}
func (q *Queue) Pop() *TreeNode {
if q.IsEmpty() {
return nil
}
node := q.elements[0]
q.elements = q.elements[1:]
return node
}
func (q *Queue) Size() int {
return len(q.elements)
}
func (q *Queue) IsEmpty() bool {
if q.Size() == 0 {
return true
}
return false
}
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
q := NewQueue()
q.Push(root)
maxDepth := 0
for !q.IsEmpty() {
qSize := q.Size() // 代表当前这一层的元素, 一定要先取出size, q.Size()会一直变化
for i := 0; i < qSize; i++ {
topNode := q.Pop()
if topNode.Left != nil {
q.Push(topNode.Left)
}
if topNode.Right != nil {
q.Push(topNode.Right)
}
}
maxDepth += 1
}
return maxDepth
}