1. 深度优先
题目描述
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
解题思路
我们怎么查看最小的深度?
可以从最下面开始,找到对应的深度
最后返回最小的深度
代码展示
public static int minDepth(TreeNode root){
if(root==null){
return 0;
}
if(root.left==null && root.right==null) return 1;
int min=Integer.MAX_VALUE;
if(root.left!=null) {
min=Math.min(minDepth(root.left),min);
}
if(root.right!=null) {
min=Math.min(minDepth(root.right),min);
}
return min+1;
}
2. 广度优先
题目描述
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
解题思路
我们广度优先就是一层一层的进行,我们找到一层之后然后找下一层,依此类推知道找到一个节点没有子节点,那么就可以结束了!
代码展示
public static int minDepth(TreeNode root){
if(root==null) return 0;
Queue<TreeNode> queue=new LinkedList<TreeNode>();
root.deep=1; //因为深度无法确定,所以我们需要添加一个变量来保存当前的深度
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node=queue.poll();
if(node.left==null&&node.right==null) //当这个节点的左右节点都是空的时候就证明已经到达了叶子节点,直接返回就可以
{
return node.deep;
}
if(node.left!=null){ //当这个节点的左节点不为空的时候我们就需要将左节点添加进去
node.left.deep=node.deep+1;
queue.offer(node.left);
}
if(node.right!=null){
node.right.deep=node.deep+1;
queue.offer(node.right);
}
}
return 0;
}
总结
深度优先和广度优先都是在树的基础上就进行的,而这里最主要的就是掌握深度优先和广度优先的区别在哪里,然后如何实现?
深度优先使用回溯的方式进行,他是首先找到最底层,然后一层一层的网上走,最后到达最上面的时候我们就可以得到最终的结果了