leetCode–104 (简单)
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
解法一:深度优先遍历
先判断根节点是否为空,如果为空直接返回0。
之后在判断,根节点的左子树和右子树的最大深度+1(加1表示根节点)
代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Solution { public int maxDepth(TreeNode root) { if (root==null) return 0; else { return Math.max(maxDepth(root.left),maxDepth(root.right))+1; } } }
|
解法二:广度优先遍历
一般广度优先遍历都要维护一个队列
在本题中有一个不同与广度优先搜索中的每次只拿出一个节点,我们需要将队列里的所有节点都拿出来进行拓展
就是队列中存放的是,当前层的所有节点。每次循环遍历,将移除该层的所有节点,再把下一层的所有节点全部放入到队列中。
这也就形成了,我们是按照层来遍历的,每遍历一层,结果的数量就+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
|
class Solution { public int maxDepth(TreeNode root) { if (root==null) return 0; Deque<TreeNode> deque = new LinkedList<>(); deque.addLast(root); int count = 0; while (!deque.isEmpty()){ int size = deque.size(); while (size>0){ TreeNode t = deque.removeFirst(); if (t.left!=null) deque.addLast(t.left); if (t.right!=null) deque.addLast(t.right); size--; } count++; } return count; } }
|