day15 559. N 叉树的最大深度&&222. 完全二叉树的节点个数&&111. 二叉树的最小深度&&104. 二叉树的最大深度
-
- N 叉树的最大深度
功能
计算 N 叉树的最大深度。N 叉树是一种每个节点可以有多个子节点的树结构。
实现方法
使用递归方法:
如果根节点为空,返回深度为 0。
如果根节点没有子节点,返回深度为 1。
遍历根节点的所有子节点,递归计算每个子树的最大深度。
使用数组存储每个子树的深度,排序后返回最大值加 1(加上根节点本身)。
- N 叉树的最大深度
//559. N 叉树的最大深度
public int maxDepth(N_Node root) {
if (root == null) {
return 0;
}
if (root.children.isEmpty()) {
return 1;
}
int[] nums=new int[root.children.size()];
for(int i=0; i<nums.length; i++) {
nums[i]=maxDepth(root.children.get(i));
}
Arrays.sort(nums);
return nums[nums.length-1]+1;
}
-
- 完全二叉树的节点个数
功能
计算完全二叉树的节点个数。
实现方法
使用递归方法:
如果根节点为空,返回节点数为 0。
递归计算左子树和右子树的节点数,加上根节点本身(+1)。
//222. 完全二叉树的节点个数
public int countNodes(TreeNode root) {
if (root == null) {
return 0;
}
return countNodes(root.left) + countNodes(root.right) + 1;
}
- 完全二叉树的节点个数
-
- 二叉树的最小深度
功能
计算二叉树的最小深度。最小深度是从根节点到最近的叶子节点的最短路径长度。
实现方法
递归实现:
如果根节点为空,返回 0。
如果根节点是叶子节点(没有左右子节点),返回 1。
递归计算左子树和右子树的最小深度,取较小值加 1。
迭代实现:
使用广度优先搜索(BFS):
使用队列存储待处理的节点。
每次处理一层节点,直到找到第一个叶子节点,返回当前深度。
//111. 二叉树的最小深度
public int minDepth(TreeNode root) {
//递归实现,效率不高8ms
/if (root == null) return 0;
if (root.left == null && root.right == null) return 1;//处理叶子结点就是根节点的情况
return Math.min(min(root.left), min(root.right)) + 1;//处理叶子结点不是根节点的情况/
//迭代实现,效率比递归高2ms
if (root == null) return 0;
int depth=1;
Queuequeue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node=queue.poll();
if (node.leftnull && node.rightnull) return depth;
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
depth++;
}
return -1;//这行代码不会被执行
}
private int min(TreeNode root) {
if (root == null) return Integer.MAX_VALUE;
if (root.left == null && root.right == null) return 1;
return Math.min(min(root.left), min(root.right)) + 1;
}
- 二叉树的最小深度
-
- 二叉树的最大深度
功能
计算二叉树的最大深度。最大深度是从根节点到最远的叶子节点的最长路径长度。
实现方法
使用递归方法:
如果根节点为空,返回深度为 0。
递归计算左子树和右子树的最大深度,取较大值加 1。
//104. 二叉树的最大深度
public int maxDepth(TreeNode root) {
if (root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;//每一层都+1返回,即加上本身所在的这一层
}
- 二叉树的最大深度

浙公网安备 33010602011771号