day15 559. N 叉树的最大深度&&222. 完全二叉树的节点个数&&111. 二叉树的最小深度&&104. 二叉树的最大深度

    1. N 叉树的最大深度
      功能
      计算 N 叉树的最大深度。N 叉树是一种每个节点可以有多个子节点的树结构。
      实现方法
      使用递归方法:
      如果根节点为空,返回深度为 0。
      如果根节点没有子节点,返回深度为 1。
      遍历根节点的所有子节点,递归计算每个子树的最大深度。
      使用数组存储每个子树的深度,排序后返回最大值加 1(加上根节点本身)。

//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;
}

    1. 完全二叉树的节点个数
      功能
      计算完全二叉树的节点个数。
      实现方法
      使用递归方法:
      如果根节点为空,返回节点数为 0。
      递归计算左子树和右子树的节点数,加上根节点本身(+1)。
      //222. 完全二叉树的节点个数
      public int countNodes(TreeNode root) {
      if (root == null) {
      return 0;
      }
      return countNodes(root.left) + countNodes(root.right) + 1;
      }
    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;
      Queue queue=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;
      }
    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返回,即加上本身所在的这一层
      }
posted @ 2025-02-05 20:41  123木头人-10086  阅读(35)  评论(0)    收藏  举报