牛客题霸NC13二叉树的最大深度Java题解
方法1:层序遍历
解题思路:利用队列进行层序遍历,每遍历完一层深度加1
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
if(root == null){
return 0;
}
LinkedList<TreeNode> queue = new LinkedList<>(); //利用队列遍历二叉树的每个节点
LinkedList<TreeNode> tmp;
queue.addFirst(root);
int res=0;
while(!queue.isEmpty()){
tmp = new LinkedList<>(); //tmp暂存下一层的节点
for(int i = queue.size();i>0;i--){ //遍历当前层的节点
TreeNode node = queue.removeLast();
if(node.left!=null){ //如果左子节点不为null,将左子节点加入到队列中
tmp.addFirst(node.left);
}
if(node.right!=null){ //如果右子节点不为null,将右子节点加入到队列中
tmp.addFirst(node.right);
}
}
queue = tmp; //将下一层的节点放入队列中
res++; //每遍历完一层,res加1
}
return res;
}
}
方法2:递归
解题思路:递归遍历左右子树,最大深度等于左右子树中较大的加1
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
if(root == null) {
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}