【LeetCode】104. Maximum Depth of Binary Tree

来源:互联网 发布:钢琴淘宝 编辑:程序博客网 时间:2024/04/30 01:35

Question:
Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

Solution:

My solution:3ms

/** * 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) {        int maxDepth = 0;        List<TreeNode> list = new ArrayList<TreeNode>();        if(null != root){            list.add(root);        }        while(list.size() > 0){            list = getChildren(list);            maxDepth++;        }        return maxDepth;    }    public List<TreeNode> getChildren(List<TreeNode> parents){        List<TreeNode> children = new ArrayList<TreeNode>();        Iterator iter = parents.iterator();        while(iter.hasNext()){            TreeNode node = (TreeNode)iter.next();            if(null != node.right){                children.add(node.right);            }            if(null != node.left){                children.add(node.left);            }        }        parents.clear();        parents = null;        return children;    }}

Net solution 1: 1ms
In my opinion, this solution is in deed a simple and quick method, but the recursion has potential problem for Exception of ‘StackOverFlow’.

public class Solution {    public int maxDepth(TreeNode root) {        if(root==null)        return 0;        int l = maxDepth(root.left);        int r = maxDepth(root.right);        if(l>r)        return l+1;        return r+1;    }}

Net solution 2: 3ms
This method gives me a new idea of using Deque;

public int maxDepth(TreeNode root) {    if (root == null)        return 0;    Deque<TreeNode> stack = new LinkedList<TreeNode>();    stack.push(root);    int count = 0;    while (!stack.isEmpty()) {        int size = stack.size();        while (size-- > 0) {            TreeNode cur = stack.pop();            if (cur.left != null)                stack.addLast(cur.left);            if (cur.right != null)                stack.addLast(cur.right);        }        count++;    }    return count;}
0 0
原创粉丝点击