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;
}