题目描述:
求给定二叉树的最大深度,
最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。
Java源码实现:
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;
if (root.left == null && root.right == null) return 1;
// 方一:递归实现
// int left = 0;
// int right = 0;
// if (root.left != null) left = maxDepth(root.left);
// if (root.right != null) right = maxDepth(root.right);
// return left > right ? left + 1 : right + 1;
// 方二:非递归实现
int dept = 0;
LinkedList<TreeNode> queue = new LinkedList<>();
int cur; // 记录处理到本层的第几个节点
int last; // 本层节点总数
TreeNode currentTreeNode;
queue.offer(root);
while(!queue.isEmpty()) {
cur = 0;
last = queue.size();
while (cur < last) { // 当还没有遍历到本层最后一个节点时循环
currentTreeNode = queue.poll();
cur++;
if (currentTreeNode.left != null) {
queue.offer(currentTreeNode.left);
}
if (currentTreeNode.right != null) {
queue.offer(currentTreeNode.right);
}
}
dept++;
}
return dept;
}
}