题目:
104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。
方法一:深度优先搜索
思路:
如果我们知道左子树和右子树的最大深度a和b,那么该二叉树的最大深度即为max(a,b)+1
而左子树和右子树的最大深度又可以以同样的方式进行计算。因此,我们可以用【深度优先搜索】的方法来计算二叉树的最大深度。具体来说,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1)时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。
代码:
class Solution { public int maxDepth(TreeNode root) { if(root==null){ return 0; } return Math.max(maxDepth(root.right),maxDepth(root.left))+1; } }
复杂度分析:
方法二:广度优先搜索
思路:
// 广度优先搜索 class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } int ans = 0; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()){ int size = queue.size(); for(int i = 0; i < size ;i++ ){ // 队头出队列 TreeNode node = queue.remove(); if(node.left != null){ queue.add(node.left); } if(node.right != null){ queue.add(node.right); } } ans++; } return ans; } }
复杂度分析: