个人网站:https://leiqicn.gitee.io/categories/leetcode/ 104. 二叉树的最大深度 - 力扣(Leetcode)
二叉树节点的深度指的是该节点到根节点的距离,也就是从根节点到该节点的路径长度。而二叉树节点的高度指的是该节点到其子树中最远叶子节点的距离,也就是该节点为根的子树的高度。
所以,可以将整个二叉树的高度定义为根节点的高度,也就是从根节点到最远叶子节点的距离。而整个二叉树的深度则没有固定的定义,通常是指二叉树中节点深度的最大值。
递归 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func max (a, b int ) int { if a > b { return a; } return b; }func maxdepth (root *treenode) int { if root == nil { return 0 ; } return max(maxdepth(root.left), maxdepth(root.right)) + 1 ; }
迭代法 可以使用模板层序遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 import "container/list" func maxDepth (root *TreeNode) int { depth := 0 if root == nil { return 0 } queue := list.New() queue.PushBack(root) for queue.Len() > 0 { size := queue.Len() for i := 0 ; i < size; i++ { first := queue.Remove(queue.Front()).(*TreeNode) if first.Left != nil { queue.PushBack(first.Left) } if first.Right != nil { queue.PushBack(first.Right) } } depth++ } return depth }
切片实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 func maxDepth (root *TreeNode) int { depth := 0 ; if root == nil { return 0 } queue := []*TreeNode{} queue = append (queue,root) for len (queue) > 0 { size := len (queue) for i:=0 ;i <size ;i++ { top := queue[0 ] queue = queue[1 :] if top.Right != nil { queue = append (queue,top.Right) } if top.Left != nil { queue = append (queue,top.Left) } } depth++ } return depth }
使用一个临时切片来存储当前层所有节点的子节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 func maxDepth (root *TreeNode) int { if root == nil { return 0 } var queue []*TreeNode queue = append (queue, root) depth := 0 for len (queue) > 0 { size := len (queue) var nextLevel []*TreeNode for i := 0 ; i < size; i++ { node := queue[0 ] queue = queue[1 :] if node.Left != nil { nextLevel = append (nextLevel, node.Left) } if node.Right != nil { nextLevel = append (nextLevel, node.Right) } } queue = nextLevel depth++ } return depth }