【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
【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的更多相关文章
- [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 ...
- [LeetCode] 111. Minimum Depth of Binary Tree ☆(二叉树的最小深度)
[Leetcode] Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 (最小有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 ...
- [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 ...
- 111 Minimum Depth of Binary Tree 二叉树的最小深度
给定一个二叉树,找出其最小深度.最小深度是从根节点到最近叶节点的最短路径的节点数量.详见:https://leetcode.com/problems/minimum-depth-of-binary-t ...
- [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 ...
- LeetCode:111_Minimum Depth of Binary Tree | 二叉树的最小深度 | Easy
要求:此题正好和Maximum Depth of Binary Tree一题是相反的,即寻找二叉树的最小的深度值:从根节点到最近的叶子节点的距离. 结题思路:和找最大距离不同之处在于:找最小距离要注意 ...
- 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 ...
- [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 ...
随机推荐
- [转]PB 基本语句 循环语句
PB 基本语句一.赋值语句赋值语句用于给变量.对象属性赋值,这是应用程序中使用最频繁的语句,其语法格式为:variablename = expression_r其中:⑴variablename是变量名 ...
- C++/C#结构体转化-二维数组-bytes To Strings
C++结构体 typedef struct VidyoClientRequestGetWindowsAndDesktops_ { /*! The number of application windo ...
- 如何让对象只在堆或者栈中分配空间ANDC++禁止一个类被继承
在开始之前先来分析一下C++中的new运算符和operator new之间的关联. new:指我们在C++里通常用到的运算符,比如A* a = new A或者调用带参数的构造函数; 对于new来说, ...
- MVC打开电脑对话框
//下载文件 public ActionResult Download(int id) { //依靠模板生成文档 var path =要下载的文件的路径 var name = Path.GetFile ...
- javaTemplates-学习笔记二
配置PlayFramework环境 下载jar包[Play with Activator],这一步有点晕是JAVA程序员CMD执行的步骤;运行了jar包下载了很多配置文件什么的,有的资源没有VPN链接 ...
- C# WINFORM 线程中更新UI
幸好今天是周末,有时间把这个问题记录一下.在多种语言之间切换,发现开发效率降的很低了,开发成本都集中到调式上了,C/C++这些放弃很久了,突然感觉线程这个问题搞的有点烦躁 我这里提到的线程中更新UI, ...
- SVN创建分支
工具:TortoiseSVN 创建一个空白项目,例如OA 从客户端检出OA,在OA文件夹下新建三个子文件夹 trunk:存放开发的主线,团队成员在开发的时候一直要用这个库中的内容 branches:存 ...
- (iOS)Storyboard/xib小技巧
1.选择被view覆盖住的view 当你想直接在view中选择自己想要的元素时,但是又碍于一个view上叠加的元素太多很难直接选中,那么在这时,你同时按住键盘上的shift和 control键,然后在 ...
- QPointer很大程度上避免了野指针(使用if语句判断即可,类似于dynamic_cast),而且使用非常方便 good
QPointer 如何翻译呢?我不太清楚,保留英文吧. The QPointer class is a template class that provides guarded pointers ...
- Java学习——Ubuntu下jdk的安装以及Java环境的配置
第一步.下载 到官网下载jdk,在Java SE Development Kit 7uXX里面,把Accept License Agreement 打勾,这样才能下载jdk,然后我们选择对应的Ubun ...