【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种代码:

 

  1 import java.util.ArrayList;
  2 import java.util.LinkedList;
  3 import java.util.List;
  4 import java.util.Queue;
  5 
  6 class TreeNode {
  7     int val;
  8     TreeNode left;
  9     TreeNode right;
 10 
 11     TreeNode(int x) {
 12         val = x;
 13     }
 14 }
 15 public class MinimumDepthofBinaryTree {
 16     /**
 17      * 递归深度遍历 
 18      * @param root
 19      * @return
 20      */
 21     public int minDepth1(TreeNode root) {
 22         if(root==null)
 23             return 0;
 24         if(root.left==null&&root.right==null){
 25             return 1;
 26         }
 27         int left=minDepth1(root.left);
 28         int right=minDepth1(root.right);
 29         if(left==0){
 30             return right+1;
 31         }
 32         if(right==0){
 33             return left+1;
 34         }
 35         else{
 36             return Math.min(right, left)+1;
 37         }
 38     }
 39     public int minDepth2(TreeNode root) {
 40         if(root==null)
 41             return 0;
 42         int left=minDepth1(root.left);
 43         int right=minDepth1(root.right);
 44         
 45         if(left==0&&right==0){
 46             return 1;
 47         }
 48         if(left==0){
 49             right= Integer.MAX_VALUE;
 50         }
 51         if(right==0){
 52             left=Integer.MAX_VALUE;
 53         }
 54         
 55             return Math.min(right, left)+1;
 56         
 57     }
 58 
 59     /**
 60      * 广度优先搜索。一旦发现叶子结点,返回遍历深度。
 61      * @param root
 62      * @return
 63      */
 64     public int minDepth3(TreeNode root) {
 65         if(root==null){
 66             return 0;
 67         }
 68         Queue<TreeNode>queue=new LinkedList<>();
 69         queue.add(root);
 70         int count=queue.size();//用来保存访问当前层次剩余未访问的节点。
 71         int depth=1;//用来保存二叉树的访问深度
 72         while(!queue.isEmpty()){
 73             //广度遍历
 74             TreeNode topNode=queue.poll();
 75             count--;
 76             if(topNode.left!=null){
 77                 queue.add(topNode.left);
 78             }
 79             if(topNode.right!=null){
 80                 queue.add(topNode.right);
 81             }
 82             //发现叶子节点
 83             if(topNode.left==null&&topNode.right==null){
 84                 return depth;
 85             }
 86             //访问一层完毕
 87             if(count==0){
 88                 depth++;
 89                 count=queue.size();
 90             }
 91             
 92         }
 93         return 0;
 94     }
 95     /**
 96      * 广度优先搜索。一旦发现叶子结点,返回遍历深度。
 97      * @param root
 98      * @return
 99      */
100     public int minDepth4(TreeNode root) {
101         if(root==null){
102             return 0;
103         }
104         List<TreeNode>list=new ArrayList<>();
105         int count=1;
106         list.add(root);
107         while(list.size()!=0){
108             List<TreeNode>singleList=new ArrayList<>();
109             for(TreeNode t:list){
110                 if(t.left!=null){
111                     singleList.add(t.left);
112                 }if(t.right!=null){
113                     singleList.add(t.right);
114                 }
115                 if(t.left==null&&t.right==null){
116                 return count;    
117                 }
118             }
119             count++;
120             list=singleList;
121         }
122         return 0;
123     }
124     public static void main(String[] args) {
125         TreeNode rootNode1 = new TreeNode(1);
126         TreeNode rootNode2 = new TreeNode(2);
127         TreeNode rootNode3 = new TreeNode(3);
128         TreeNode rootNode4 = new TreeNode(4);
129         TreeNode rootNode5 = new TreeNode(5);
130         TreeNode rootNode6 = new TreeNode(6);
131         TreeNode rootNode7 = new TreeNode(7);
132         rootNode1.left = rootNode2;
133         rootNode1.right = rootNode3;
134         rootNode2.left = rootNode4;
135         rootNode2.right = rootNode5;
136         rootNode3.left = rootNode6;
137         rootNode3.right = rootNode7;
138         MinimumDepthofBinaryTree  minimumDepthofBinaryTree=new MinimumDepthofBinaryTree();
139         System.out.println(minimumDepthofBinaryTree.minDepth4(rootNode1));
140 
141     }
142     
143 }

 

转载于:https://www.cnblogs.com/hitkb/p/4243664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonopencv的配置_python配置与使用OpenCV

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

php中datetime,珍藏 PHP中DateTime的常用方法

前言实例化对象前面加\表示的是&#xff0c;在命名空间中使用原生的类&#xff0c;如果没有使用命名空间的话&#xff0c;可以把前面的\给删除掉输出当前时间$datetime new \DateTime;print_r($datetime->format(Y-m-d H:i:s));输出给定的时间$datetime new \DateTime(201…

php 实现跨站下载图片,一个图片url访问后直接下载怎样实现

一个图片url访问后直接下载怎样实现先看代码downloadIamge(imgsrc, name) {//下载图片地址和图片名let image new Image();// 解决跨域 Canvas 污染问题image.setAttribute("crossOrigin", "anonymous");image.onload function() {let canvas document.…

【BZOJ】【1086】 【SCOI2005】王室联邦

树分块 orz vfk && PoPoQQQ http://vfleaking.blog.163.com/blog/static/174807634201231684436977/http://blog.csdn.net/popoqqq/article/details/42772237 这题是要把树分成一块一块的……&#xff08;感觉好像不是原来理解的树分块处理操作啊……&#xff09; 每块…

matlab火焰测温源程序,一种火焰测温方法与流程

本发明涉及一种测量火焰温度的方法。背景技术&#xff1a;火焰是气态的且正在发生剧烈氧化反应的燃料及各种中间产物及最终产物的混合物。在煤化工、化工领域&#xff0c;在高温、高压反应器(或气化炉)上&#xff0c;火焰检测器一般安装在气化炉的顶部或者中下部&#xff0c;用…

python spark hadoop_使用Scala或Python列出存储在Hadoop HDFS上的Spark群集中可用的所有文件?...

列出Spark中本地可用的所有文件名的最有效方法是什么&#xff1f;我正在使用Scala API&#xff0c;但是&#xff0c;Python也应该没问题。解决方案import org.apache.hadoop.fs。{FileSystem&#xff0c;FileUtil&#xff0c;Path}import scala.collection.mutable.Stack$ b $ …

asp.net权限控制配置web.config

项目下 有三个文件夹 A,B,C 验正方式是 Forms 验正 我要设置他们的访问权限为, A,匿名可访问 B,普通用户授权后才能访问 C,只允许管理员访问 <configuration> <location path "A "> <system.web> <authorization> <allow users…

oracle排序函数性能,oracle排序函数

rank,dense_rank,row_number&#xff0c;以及分组排名partitionrank:排名会出现并列第n名&#xff0c;它之后的会跳过空出的名次&#xff0c;例如&#xff1a;1,2,2,4dense_rank:排名会出现并列第n名&#xff0c;它之后的名次为n1&#xff0c;例如&#xff1a;1,2,2,3row_numbe…

pythonplotline_带误差条的python绘图线,pythonplotlinewitherrorbar

我们有时候会面临画带有误差的图&#xff0c;大致长成下面这个样子image.png代码为# -*- coding: utf-8 -*-"""Created on Sun Jul 5 21:12:17 2020author: x1c"""import matplotlib.pyplot as pltimport seaborn as snsimport numpy as npsns.s…

php什么是变量6,PHP变量是什么

PHP是一门弱类型语言&#xff0c;本身不严格区分变量的类型。PHP在变量申明的时候不需要指定类型。PHP在程序运行期间可能进行变量类型的隐示转换。 和其他强类型语言一样&#xff0c;程序中也可以进行显示的类型转换。PHP变量可以分为简单类型(int、string、bool)、集合类型(a…

美国只有两样东西要比中国 贵,一个是智慧财产权,一个是人工

美国只有两样东西比中国贵 最近中国一直在热传美国的物价低于中国&#xff0c;特别是生活必需品方面&#xff0c;甚至换算成同一种货币都低于中国。从整体情况来 看&#xff0c;美国人各项消费的支出所占收入的比例要远远低于中国人。有人提出来疑问说&#xff0c;那美国人收入…

红黑树和平衡二叉树的区别_面试题精选红黑树(c/c++版本)

红黑树的使用场景非常广泛&#xff0c;比如nginx中用来管理timer、epoll中用红黑树管理事件块&#xff08;文件描述符&#xff09;、Linux进程调度Completely Fair Scheduler用红黑树管理进程控制块、CSTL中map,set的底层实现全是用的红黑树。掌握红黑树的原理以及使用场景&…

linux 更新软件命令 失败,对linux下软件(库)的更新命令详解

在ubuntu服务器下安装包的时候&#xff0c;经常会用到sudo apt-get install 包名 或 sudo pip install 包名&#xff0c;那么两者有什么区别呢&#xff1f;1.区别pip用来安装来自PyPI(https://www.python.org/)的python所有的依赖包&#xff0c;并且可以选择安装任何在PyPI上已…

查看oracle死锁进程并结束死锁

查看oracle死锁进程并结束死锁 摘自: http://sqcjy111.iteye.com/blog/1183928 查看锁表进程SQL语句1&#xff1a; select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$sessio…

python科学坐标图绘制的四个要素_Python3.0科学计算学习之绘图(四)

绘制三维图&#xff1a;mplot3d工具包提供了点、线、等值线、曲面和所有其他基本组件以及三维旋转缩放的三维绘图。1.散点的三维数据图from mpl_toolkits.mplot3d import axes3d #需要从mplot3d模块中导入axes 3D类型import numpy as npimport matplotlib.p…

linux shell tr命令,linux shell tr命令详解

tr命令是linux下的一个命令&#xff0c;那么它的语法和用途是什么呢?下面由学习啦小编为大家整理了linux shell tr命令的相关知识&#xff0c;希望大家喜欢!linux shell tr命令tr是translate的简写&#xff0c;亦即翻译&#xff0c;但是遗憾的是&#xff0c;它不能翻译句子&am…

PHP 函数:intval()

intval 变量转成整数类型。 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型。可省略的参数 base 是转换的基底&#xff0c;默认值为 10。转换的变量 var 可以为数组或类之外的任何类型变量。转载于:htt…

python桌面应用html_是否将Python后端与HTML / CSS / JS用户界面集成到桌面应用程序? - javascript...

在创建桌面应用程序时&#xff0c;如何或将Python代码与HTML / CSS / JS集成为用户界面&#xff0c;该如何做&#xff1f;一个简单的例子&#xff1b;如果我想用Python创建一个打印“ Hello World&#xff01;”的函数并使用HTML / CSS / JS创建用户界面(使其精美&#xff0c;也…

linux中按行读取文件,Linux按行读取文件内容

方法1&#xff1a;while循环中执行效率最高&#xff0c;最常用的方法。function while_read_LINE_bottm(){While read LINEdoecho $LINEdone < $FILENAME}#!/bin/bashwhile read linedoecho $linedone < filename(待读取的文件)注释&#xff1a;习惯把这种方式叫做read釜…

Visual C++ 基础数据类型的转换

16.1如何将基本数据类型转换成CString类型 用CString的Format方法 void CDemoView::OnDraw(CDC* pDC) {int a 100;double b 1.23;//将整型转换成CStringCString str1 _T("");str1.Format(_T("%d"), a);//将实型转换成CStringCString str2 _T("&qu…