思路分析
- 深度优先遍历
- 广度优先遍历
代码实现
这两种都是模板代码,这里做记录方便后续回顾
- 深度优先遍历
java
public int maxDepth(TreeNode root){
// 递归结束条件
if(root == null) return 0;
// 递归遍历左子树
int left = maxDepth(root.left);
// 递归遍历右子树
int right = maxDepth(root.right);
return Math.max(left, right) + 1;
}
- 广度优先遍历
java
public int maxDepth2(TreeNode root){
Queue<TreeNode> queue = new ArrayDeque<>();
// 根节点入队
if(root != null) queue.offer(root);
int level = 0;
// 队非空时
while (!queue.isEmpty()){
// 获取当前队列长度
int size = queue.size();
// 遍历队列中当前层级节点
while(size > 0){
// 出队
TreeNode poll = queue.poll();
// 左节点入队
if (poll.left != null) {
queue.offer(poll.left);
}
// 右节点入队
if (poll.right != null) {
queue.offer(poll.right);
}
--size;
}
// 层级加一
++level;
}
return level;
}