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.
Note: A leaf is a node with no children.
Example:
Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its minimum depth = 2.
第一种:递归解决问题
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root == null) return 0;
if(root.right != null && root.left != null) return Math.min(minDepth(root.left) + 1, minDepth(root.right) + 1);
if(root.right != null) return minDepth(root.right) + 1;
else return minDepth(root.left) + 1;
}
}
public class Solution {
public int minDepth(TreeNode root) {
if(root == null) return 0;
int left = minDepth(root.left);
int right = minDepth(root.right);
return (left == 0 || right == 0) ? left + right + 1: Math.min(left,right) + 1;
}
}
广度优先遍历BFS
这道题用BFS恰到好处
class Solution {
public:
int minDepth(TreeNode *root) {
if(root==NULL)
return 0;
queue<TreeNode*>queue;
queue.push(root);
int depth=1;
while(!queue.empty())
{
int size=queue.size();
for(int i=0;i<size;i++)
{
TreeNode *temp=queue.front();
queue.pop();
if(!temp->left&&!temp->right)
return depth;
if(temp->left)queue.push(temp->left);
if(temp->right)queue.push(temp->right);
}
depth++;
}
return -1;
}
};
最后看了LeetCode大多用的都是BFS,毕竟这道题找出最短深度确实是为BFS量身定做,但自己在树递归这块感觉还是力不从心
同样还有动态规划,接下来要把树的几种递归和非递归方法写出来,毕竟在非递归中要一直用到栈,而且对思路的拓展也有很好的帮助