题目详情
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
示例 1:
给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。
3
/ \
9 20
/ \
15 7
Java代码(递归)
public int maxDepth(TreeNode root) {
return root==null? 0 : Math.max(maxDepth(root.left), maxDepth(root.right))+1;
}
总结
递归的结束条件是遇到了叶子节点,如果遇到了叶子节点就返回0,因为叶子节点都是从0开始。如果不是叶子节点那么就比较左右子树的深度大小,取比较大的子树之后加一,因为要加自身的深度。通过递归可以得到整个树的最大深度。
Java代码(BFS:广度优先)
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
//创建一个队列
Deque<TreeNode> deque = new LinkedList<>();
deque.push(root);
int count = 0;
while (!deque.isEmpty()) {
//每一层的个数
int size = deque.size();
while (size-- > 0) {
TreeNode cur = deque.pop();
if (cur.left != null)
deque.addLast(cur.left);
if (cur.right != null)
deque.addLast(cur.right);
}
count++;
}
return count;
}
总结
一层层遍历,统计一下总共有多少层