【LeetCode】剑指 Offer 55 - I. 二叉树的深度

题目描述:

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
在这里插入图片描述
题目来源于LeeCode:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/

解题思路:

  • 方法一:后序遍历:递归的找到左右子树的深度,然后返回最大值。注意:别忘记最后要加上根节点的深度为1。
  • 方法二:层序遍历:二叉树的深度等于二叉树的层数,所以层序遍历二叉树,统计二叉树的层数即可。

后序遍历:

/**
 * 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;
        return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
    }
}

层序遍历:

/**
 * 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;
        Queue<TreeNode> arr = new LinkedList<TreeNode>();
        arr.offer(root);
        int depth = 0;
        while (!arr.isEmpty()) {
    
    
            Queue<TreeNode> ans = new LinkedList<TreeNode>();
            int len = arr.size();
            for (int i = 0; i < len; i++) {
    
    
                TreeNode cur = arr.poll();
                if (cur.left != null) {
    
    
                    ans.offer(cur.left);
                }
                if (cur.right != null) {
    
    
                    ans.offer(cur.right);
                }
            }
            arr = ans;
            depth++;
        }
        return depth;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43356538/article/details/114382250