一.递归法
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
// write code here
//没有树,深度为0
if (root == null) {
return 0;
}
//m代表左子树的深度,n代表右子树的深度
int m = maxDepth(root.left);
int n = maxDepth(root.right);
if (m > n) {
return m+1;
}
return n+1;
}
}
二.非递归法
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
// write code here
//如果根结点为空,深度为0
if (root == null) {
return 0;
}
//用队列存储结点
Queue<TreeNode> queue = new LinkedList<>();
//先将头结点存储到队列中
queue.offer(root);
//res记录深度
int res = 0;
//当队列为空时,二叉树遍历完成
while (!queue.isEmpty()) {
//n记录队列中的元素
int n = queue.size();
/**
* 遍历第一层,res+1,
* 第二层遍历完,res再+1,
* 直到最后一层叶子节点遍历完,
* 队列中没有元素,res就是树的深度
*/
for (int i = 0; i < n; i++) {
TreeNode poll = queue.poll();
if (poll.left != null) {
queue.offer(poll.left);
}
if (poll.right != null) {
queue.offer(poll.right);
}
}
res++;
}
return res;
}
}