JZ55 二叉树的深度
【题】
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。
数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100
进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)
【思路】
1、递归
2、利用队列进行层次遍历
【代码】
1、递归
public class Solution {
public int TreeDepth(TreeNode root) {
if (root == null)
return 0;
return Math.max(TreeDepth(root.left), TreeDepth(root.right)) + 1;
}
}
时间复杂度:O(n)O(n)O(n),其中nnn为二叉树的节点数,遍历整棵二叉树
空间复杂度:O(n)O(n)O(n),最坏情况下,二叉树化为链表,递归栈深度最大为nnn
2、利用队列进行层次遍历
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
// 空
if (root == null)
return 0;
// 用一个队列存储每层节点(队列先进先出)
Queue<TreeNode> p = new LinkedList<TreeNode>();
// 首先将根节点入队列
p.offer(root);
// 记录层数
int res = 0;
while (!p.isEmpty()) {
int n = p.size();
// 遍历完这一层,再进入下一层
for (int i = 0; i < n; i++) {
// 队列输出
TreeNode node = p.poll();
// 若该节点有左右节点,就入队列
if (node.left != null) {
p.offer(node.left);
}
if (node.right != null) {
p.offer(node.right);
}
}
// 遍历完一层之后深度加1
res++;
}
return res;
}
}
时间复杂度:O(n)O(n)O(n),其中nnn为二叉树的节点数,遍历整棵二叉树
空间复杂度:O(n)O(n)O(n),辅助队列的空间最坏为nnn