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++,最终得到二叉树的深度。
本文对比了使用深度优先搜索和广度优先搜索两种方法来计算二叉树的最大深度。详细阐述了每种方法的实现逻辑,并通过代码示例进行演示,帮助理解不同搜索策略在解决此类问题时的特点与效率。
1376

被折叠的 条评论
为什么被折叠?



