【Leetcode】104. Maximum Depth of Binary Tree

来源:互联网 发布:淘宝王子团队联系方式 编辑:程序博客网 时间:2024/06/05 09:13

方法一:递归

思路:

(1)若树为空,则直接返回0。

(2)否则返回左子树的最大高度和右子树的最大高度的较大值+1。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int maxDepth(TreeNode root) {        if (root == null)            return 0;        return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;    }}

Runtime:1ms


方法二:层次遍历

思路:

(1)若树为空,则直接返回0。

(2)创建一个队列queue,用于存放所有节点,把根节点加入队列,用maxDepth记录最大高度。

(3)遍历队列,队列里的节点正是当前层得到节点,队列长度正是当前层的节点个数,遍历当前层的所有节点,若其左孩子不为空,则左孩子加入队列,若其右孩子不为空,则右孩子加入队列。注意每一层处理时需要先把队列长度保存在变量中,否则内层循环会导致队列长度递减。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int maxDepth(TreeNode root) {        if (root == null)            return 0;        Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.add(root);        int maxDepth = 0;        while (!queue.isEmpty()) {            int size = queue.size();            for (int i = 0; i < size; i++) {                TreeNode node = queue.poll();                if (node.left != null)                    queue.add(node.left);                if (node.right != null)                    queue.add(node.right);            }            maxDepth++;        }        return maxDepth;    }}
Runtime:2ms

1 0