1.递归:
/**
* 递归实现二叉树最大深度
* 时间复杂度O(n)
* 空间复杂度:线性表最差O(n)、二叉树完全平衡最好O(logn)
*
* @param root 根节点
* @return 最大深度
*/
private static int maxDepth(TreeNode root) {
//递归退出条件,到叶子节点
if (root == null) {
return 0;
}
//计算左子树最大深度
int leftMaxDepth = maxDepth(root.left);
//计算右子树最大深度
int rightMaxDepth = maxDepth(root.right);
//以某个节点为根节点的数的最大深度为max
//max=max(leftMaxDepth,rightMaxDepth)+1
return Math.max(leftMaxDepth, rightMaxDepth) + 1;
}
2.迭代
BFS层次遍历思想
/**
* BFS迭代实现二叉树最大深度
* 时间复杂度O(n)
* 空间复杂度:线性表最差O(n)、二叉树完全平衡最好O(logn)
*
* @param root 根节点
* @return 最大深度
*/
private static int maxDepth1(TreeNode root) {
if (root == null) {
return 0;
}
//BFS的层次遍历思想,记录二叉树的层数,
//遍历完,层数即为最大深度
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
int maxDepth