Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Analysis:
we could solve this in recursive and iterative way.
recursive, a little similar with maximum depth of binary tree. Different is to handle the situation that one subchild is null,
like [1,#,2].
java
public int minDepth(TreeNode root) {
if(root == null) return 0;
int left = minDepth(root.left);
int right = minDepth(root.right);
if(left == 0 && right ==0) return 1;
if(left == 0) left = Integer.MAX_VALUE;
if(right == 0) right = Integer.MAX_VALUE;
return Math.min(left, right)+1;
}c++
int minDepth(TreeNode *root) {
if(root == NULL) return 0;
int lmin = minDepth(root->left);
int rmin = minDepth(root->right);
if(lmin==0 && rmin == 0)
return 1;
if(lmin == 0)
lmin = INT_MAX;
if(rmin == 0)
rmin = INT_MAX;
return min(lmin, rmin)+1;
}2. iterative way
Since the aim is to find the shortest path, the BFS is better. A queue is used to store every node from the binary tree in depth order. Pop each node, if there exist its left and right tree store it, otherwise if it is left node, return its depth. To store
each node and its depth
c++
int minDepthBFS(TreeNode *root) {
queue<pair<TreeNode*, int>> q;
if(root == NULL) return 0;
q.push(make_pair(root,1));
while(!q.empty()){
pair<TreeNode*, int> cur = q.front();
q.pop();
if(!cur.first->left && !cur.first->right) return cur.second;
if(cur.first->left)
q.push(make_pair(cur.first->left,cur.second+1));
if(cur.first->right)
q.push(make_pair(cur.first->right,cur.second+1));
}
}java
public int minDepthBFS(TreeNode root){
if(root == null) return 0;
ArrayList<TreeNode> last = new ArrayList<TreeNode>();
last.add(root);
int count =1;
while(!last.isEmpty()){
ArrayList<TreeNode> cur = new ArrayList<TreeNode>();
for (TreeNode treeNode : last) {
if(treeNode.left == null && treeNode.right == null) return count;
if(treeNode.left != null) cur.add(treeNode.left);
if(treeNode.right != null) cur.add(treeNode.right);
}
count++;
last = new ArrayList<TreeNode>(cur);
}
return count;
}

本文探讨了如何通过递归和迭代的方式找到二叉树的最小深度,即从根节点到最近叶子节点的最短路径长度。同时,介绍了使用广度优先搜索(BFS)的迭代方法来实现这一目标。
430

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



