面试题55 - I. 二叉树的深度

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

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

3

/
9 20 /
15 7 返回它的最大深度 3 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路一:递归

二叉树的最大深度就是根节点的深度,根节点的深度为其左右子节点的最大深度加1, 而其左右子树的最大深度也分别是其子树的最大深度+1, 故想到递归。 代码如下,非常简单。

1
2
3
4
5
6
7
class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;

        return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
    }
}

思路二:迭代

类似层序遍历,利用队列,遍历完一层时,height++ 直至结束。 代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public int maxDepth(TreeNode root){
        if (root == null) return 0;

        int height = 0;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()){

            int size = queue.size();
            while (size > 0){
                TreeNode node = queue.poll();

                if (node.left != null) queue.add(node.left);
                if (node.right != null) queue.add(node.right);

                size --;
            }

            height ++;
        }

        return height;
    }