题目
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
方法一:深度优先搜索
public int minDepth(TreeNode root) {
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
int mind=Integer.MAX_VALUE;
if(root.left!=null){
mind=Math.min(minDepth(root.left),mind);
}
if(root.right!=null){
mind=Math.min(minDepth(root.right),mind);
}
return mind+1;
}
复杂度分析 时间复杂度:O(N),其中 N 是树的节点数。对每个节点访问一次。 空间复杂度:O(H)
方法二:广度优先搜索
class Solution {
class QueueNode {
TreeNode node;
int depth;
public QueueNode(TreeNode node, int depth) {
this.node = node;
this.depth = depth;
}
}
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
Queue<QueueNode> queue = new LinkedList<QueueNode>();
queue.offer(new QueueNode(root, 1));
while (!queue.isEmpty()) {
QueueNode nodeDepth = queue.poll();
TreeNode node = nodeDepth.node;
int depth = nodeDepth.depth;
if (node.left == null && node.right == null) {
return depth;
}
if (node.left != null) {
queue.offer(new QueueNode(node.left, depth + 1));
}
if (node.right != null) {
queue.offer(new QueueNode(node.right, depth + 1));
}
}
return 0;
}
}
复杂度分析 时间复杂度:O(N),其中 N 是树的节点数。对每个节点访问一次。 空间复杂度:O(N)
|