题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
示例:
给定二叉树 [3,9,20,null,null,15,7],
FS
返回它的最大深度 3 。
二叉树数据结构描述:
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
解题思路
BFS:
1.先把root加入队列 2.循环,每次取二叉树的一层出来扩展,同时ans++ 3.return ans
有点像二叉树的层序遍历,与DFS对比,BFS有更好的空间复杂度,但是时间复杂度差一点
BFS的Java实现:
public int maxDepth(TreeNode root) { if (root==null){ return 0; } int ans = 0; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()){ int size = queue.size(); for (int i = 0;i<size;i++){ TreeNode node = queue.poll(); if (node.right!=null){ queue.offer(node.right); } if (node.left!=null){ queue.offer(node.left); } } ans++; } return ans; }
DFS:
二叉树的最大深度等于左子树最大深度和右子树最大深度的较大者加一,可以使用递归解法
DFS使用递归解法有比较简洁的代码,对比BFS,空间复杂度会差一点,时间复杂度好一点
DFS的Java实现:
public int maxDepth(TreeNode root) { if (root==null){ return 0; } else { int leftdep = maxDepth(root.left); int rightdep = maxDepth(root.right); return Math.max(leftdep,rightdep)+1; } }
思路理解了不妨取leetcode练练手