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.
首先,根据深度优先搜索的思路,用递归来做
java code如下
public int maxDepth(TreeNode root) {
int depth = 0;
if(root == null) return 0;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return leftDepth > rightDepth ? leftDepth+1 : rightDepth+1;
}
391ms
其次,可以根据广度优先搜索的思路,得到非递归的解法。
public int maxDepth(TreeNode root) {
if(root == null) return 0;
Queue<TreeNode> myQueue = new LinkedList<TreeNode>();
int depth = 0;
int eachLevelNums = 1;
myQueue.offer(root);
while(!myQueue.isEmpty()) {
TreeNode tmp = myQueue.poll();
eachLevelNums--;
if(tmp.left != null) myQueue.offer(tmp.left);
if(tmp.right != null) myQueue.offer(tmp.right);
if(eachLevelNums == 0) {
depth++;
eachLevelNums = myQueue.size();
}
}
return depth;
}
393ms
其中,利用一个计数器eachLevelNums,每当从队列中拿出某一层的所有元素的时候,深度值depth++,最终得到二叉树的深度。