Leetcod刷题(14)——104. 二叉树的最大深度

2022-06-22 14:18:07 浏览数 (1)

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例: 给定二叉树 [3,9,20,null,null,15,7],

代码语言:javascript复制
  	3
   / 
  9  20
    /  
   15   7

返回它的最大深度 3 。

我的解法: 采用递归思路,根节点的层次,等于左子树和右子树中最大的深度 1,一直递归到叶子节点结束即可,叶子节点的深度是1

代码语言:javascript复制
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null&&root.right==null){
            return 1;
        }
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return leftDepth>rightDepth?leftDepth 1:rightDepth 1;
    }
}

解法2: 深度优先算法 只需要辅助记录一下左右子树所在的层级即可

代码语言:javascript复制
import javafx.util.Pair;
import java.lang.Math;

class Solution {
  public int maxDepth(TreeNode root) {
    Queue<Pair<TreeNode, Integer>> stack = new LinkedList<>();
    if (root != null) {
      stack.add(new Pair(root, 1));
    }

    int depth = 0;
    while (!stack.isEmpty()) {
      Pair<TreeNode, Integer> current = stack.poll();
      root = current.getKey();
      int current_depth = current.getValue();
      if (root != null) {
        depth = Math.max(depth, current_depth);
        stack.add(new Pair(root.left, current_depth   1));
        stack.add(new Pair(root.right, current_depth   1));
      }
    }
    return depth;
  }
}

0 人点赞