【LeetCode】Minimum Depth of Binary Tree

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.

递归和非递归,此提比较简单。广度优先遍历即可。关键之处就在于如何保持访问深度。

下面是4种代码:

 import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue; class TreeNode {
int val;
TreeNode left;
TreeNode right; TreeNode(int x) {
val = x;
}
}
public class MinimumDepthofBinaryTree {
/**
* 递归深度遍历
* @param root
* @return
*/
public int minDepth1(TreeNode root) {
if(root==null)
return 0;
if(root.left==null&&root.right==null){
return 1;
}
int left=minDepth1(root.left);
int right=minDepth1(root.right);
if(left==0){
return right+1;
}
if(right==0){
return left+1;
}
else{
return Math.min(right, left)+1;
}
}
public int minDepth2(TreeNode root) {
if(root==null)
return 0;
int left=minDepth1(root.left);
int right=minDepth1(root.right); if(left==0&&right==0){
return 1;
}
if(left==0){
right= Integer.MAX_VALUE;
}
if(right==0){
left=Integer.MAX_VALUE;
} return Math.min(right, left)+1; } /**
* 广度优先搜索。一旦发现叶子结点,返回遍历深度。
* @param root
* @return
*/
public int minDepth3(TreeNode root) {
if(root==null){
return 0;
}
Queue<TreeNode>queue=new LinkedList<>();
queue.add(root);
int count=queue.size();//用来保存访问当前层次剩余未访问的节点。
int depth=1;//用来保存二叉树的访问深度
while(!queue.isEmpty()){
//广度遍历
TreeNode topNode=queue.poll();
count--;
if(topNode.left!=null){
queue.add(topNode.left);
}
if(topNode.right!=null){
queue.add(topNode.right);
}
//发现叶子节点
if(topNode.left==null&&topNode.right==null){
return depth;
}
//访问一层完毕
if(count==0){
depth++;
count=queue.size();
} }
return 0;
}
/**
* 广度优先搜索。一旦发现叶子结点,返回遍历深度。
* @param root
* @return
*/
public int minDepth4(TreeNode root) {
if(root==null){
return 0;
}
List<TreeNode>list=new ArrayList<>();
int count=1;
list.add(root);
while(list.size()!=0){
List<TreeNode>singleList=new ArrayList<>();
for(TreeNode t:list){
if(t.left!=null){
singleList.add(t.left);
}if(t.right!=null){
singleList.add(t.right);
}
if(t.left==null&&t.right==null){
return count;
}
}
count++;
list=singleList;
}
return 0;
}
public static void main(String[] args) {
TreeNode rootNode1 = new TreeNode(1);
TreeNode rootNode2 = new TreeNode(2);
TreeNode rootNode3 = new TreeNode(3);
TreeNode rootNode4 = new TreeNode(4);
TreeNode rootNode5 = new TreeNode(5);
TreeNode rootNode6 = new TreeNode(6);
TreeNode rootNode7 = new TreeNode(7);
rootNode1.left = rootNode2;
rootNode1.right = rootNode3;
rootNode2.left = rootNode4;
rootNode2.right = rootNode5;
rootNode3.left = rootNode6;
rootNode3.right = rootNode7;
MinimumDepthofBinaryTree minimumDepthofBinaryTree=new MinimumDepthofBinaryTree();
System.out.println(minimumDepthofBinaryTree.minDepth4(rootNode1)); } }

【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java的更多相关文章

  1. [LeetCode] Minimum Depth of Binary Tree 二叉树的最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  2. [LeetCode] 111. Minimum Depth of Binary Tree ☆(二叉树的最小深度)

    [Leetcode] Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 (最小有3种解法) 描述 解析 递归深度优先搜索 当求最大深度时,我们只要 ...

  3. [LeetCode] 111. Minimum Depth of Binary Tree 二叉树的最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  4. [Leetcode] The minimum depth of binary tree二叉树的最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  5. 111 Minimum Depth of Binary Tree 二叉树的最小深度

    给定一个二叉树,找出其最小深度.最小深度是从根节点到最近叶节点的最短路径的节点数量.详见:https://leetcode.com/problems/minimum-depth-of-binary-t ...

  6. [LeetCode] Minimum Depth of Binary Tree 二叉树最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  7. LeetCode:111_Minimum Depth of Binary Tree | 二叉树的最小深度 | Easy

    要求:此题正好和Maximum Depth of Binary Tree一题是相反的,即寻找二叉树的最小的深度值:从根节点到最近的叶子节点的距离. 结题思路:和找最大距离不同之处在于:找最小距离要注意 ...

  8. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree

    LeetCode:Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth ...

  9. [LeetCode] Maximum Depth of Binary Tree 二叉树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

随机推荐

  1. SQL2008 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

    'OFFSET' 附近有语法错误.在 FETCH 语句中选项 NEXT 的用法无效. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出 ...

  2. “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

    目录: “Zhuang.Data”轻型数据库访问框架(一)开篇介绍 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 先来看一段代码 DbAccessor dba ...

  3. CreateEvent,OpenEvent成功后 是否需要::CloseHandle(xxx); 避免句柄泄漏

    bool bExist = false; HANDLE hHandle = ::CreateEvent(NULL,  FALSE,  FALSE,  L"Global\\xxxxx_name ...

  4. .Net 类型、对象、线程栈、托管堆运行时的相互关系

    JIT(just in time)编译器 接下来的会讲到方法的调用,这里先讲下JIT编译器.以CLR书中的代码为例(手打...).以Main方法为例: static void Main(){ Cons ...

  5. 关于Google指令(别提baidu)

    关于google指令 关于google指令 google为我们准备好了的"指令"(directive),可以最大限度帮助我们完成每一次搜索.这些指令其实就是一个个关键字,能让我们从 ...

  6. Visual Studio 2013使用SASS和Compass--SASS和Compass安装

    你需要安装ruby 你需要安装SASS/Compass 安装sass,在命令行中输入: $ gem install sass 你可能会问gem是什么?gem是ruby的包管理器.包的概念呢,就是一个为 ...

  7. 操作native window的QxtWindowSystem (好像是一个IM的一部分)

    http://libqxt.bitbucket.org/doc/0.6/qxtwindowsystem.html https://github.com/psi-plus/plugins/blob/ma ...

  8. Html 小插件3

    搜狗搜索框代码 <script>function verifyquery(form){if(form.sogou_drop.value==2){form.insite.value='';} ...

  9. Dijkstra算法模拟讲解

    dijkstra算法,是一个求单源最短路径算法 其算法的特点为: 层层逼进,有点类似宽度搜索的感觉 其需要的数据结构为:                  int map[N][N] 所有点之间的权表 ...

  10. 11136-Hoax or what

    Each Mal-Wart supermarket has prepared a promotion scheme run by the following rules: A client who w ...