二叉树的深度<java版>
二叉树的结构
二叉树是比较常见的一种的一种数据结构。
首先看看二叉树的数据结构:
//由左节点和右节点以及一个节点值构成
public class TreeNode{
TreeNode leftNode;
TreeNode rightNode;
int val;
TreeNode(int val){
this.val=val;
this.leftNode=null;
this.rightNode=null;
}
}
正是由于二叉树的这个结构,所以我们常用遍历解决二叉树的相关问题。
二叉树的深度问题
二叉树的深度问题主要分为两种,最大深度和最小深度。
最大深度:即二叉树的高度
递归思路:递归跳出条件是判断一个节点是否是空,如果为空则跳出,如果不为空则加一继续递归。最后的返回值只需返回左子树和右子树中的最大值。
代码实现:
public int deepthTree(TreeNode node){
if (node==null){
return 0; //递归跳出条件
}
return Math.max(deepthTree(node.leftNode),deepthTree(node.rightNode))+1;
}
非递归思路:采用二叉树的层序遍历的思想(层序遍历为我们可以采用队列进行辅助操作)。我们需要遍历每层,每遍历完一层则将level进行加一的操作。这个问题的关键在于如何知道每层是否遍历完了,我们可以定义一个初始变量cur,然后将cur和每层的进入队列的节点的size进行比较,判断是否遍历完这个层的最后一个节点。
代码实现:
public int deepthTree(TreeNode node){
//非递归实现
LinkedList<TreeNode> queue=new LinkedList<>(); //设置队列
queue.offer(node); //将根节点入队列
TreeNode bitTree=null;
int level=0;
while (!queue.isEmpty()){
int cur=0; //当每层遍历完的时候,cur恢复初始值
int length=queue.size();
while (cur<length){
bitTree=queue.poll();
cur++;
if (bitTree.leftNode!=null) {
queue.offer(bitTree.leftNode);
}
if (bitTree.rightNode!=null) {
queue.offer(bitTree.rightNode);
}
}
level++; //层数进行++
}
return level;
}
最小深度
参考别人整理的思路:
思路:
1.没有根节点,那结果就是0
2.有根节点,没有左右子树,结果为1
3.没有左子树,有右子树。把右子树看成一棵新的树。
4.没有右子树,有左子树。把左子树看成一棵新的树。
5.既有左子树,又有右子树。那就把左右子树分别都看成新的树,最后比较谁的最近叶子的路径短,就取哪边。
---------------------
原文:https://blog.csdn.net/sinat_35803474/article/details/70040544
代码实现:
public int deepthTree(TreeNode node){
//<--最小深度-->
if (node==null){
return 0;
}
if (node.leftNode==null && node.rightNode==null){
return 1;
}
if (node.rightNode==null){
return deepthTree(node.leftNode)+1;
}else if (node.leftNode==null){
return deepthTree(node.rightNode)+1;
}else {
return Math.min(deepthTree(node.leftNode),deepthTree(node.rightNode))+1;
}
}
二叉树的深度<java版>的更多相关文章
- 剑指offer【08】- 二叉树的深度(java)
题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题, ...
- 实现二叉树的基本操作(Java版)
近期研究了一下二叉树,试着用Java语言实现了二叉树的基本操作,下面分享一下实现代码: package com.sf.test; import java.util.ArrayDeque; import ...
- 二叉树的宽度<java版>
二叉树的宽度 思路:层序遍历的时候,记录每层的节点数量,最后取记录中的最多的数量. 代码实现: public int solution(TreeNode node){ LinkedList<Tr ...
- 《剑指offer》面试题19 二叉树的镜像 Java版
书中方法:这道题目可能拿到手没有思路,我们可以在纸上画出简单的二叉树来找到规律.最后我们发现,镜像的实质是对于二叉树的所有节点,交换其左右子节点.搞清楚获得镜像的方法,这道题实际上就变成了一道二叉树遍 ...
- 将一个二叉树左右翻转(Java 版)
public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; ...
- 剑指Offer面试题39(Java版):二叉树的深度
题目:输入一棵二叉树的根节点,求该数的深度. 从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度. 比如.例如以下图的二叉树的深度为4.由于它从根节点到叶结点的最 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...
- 【剑指offer】Java版代码(完整版)
原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一.引言 <剑指offer>可谓是程序猿面试的神书了,在面试中 ...
随机推荐
- Gradle Goodness: Excluding Tasks for Execution
In Gradle we can create dependencies between tasks. But we can also exclude certain tasks from those ...
- Java并发编程(三)什么是线程池
什么是线程池 学习编程的小伙伴们会经常听到“线程池”.“连接池”这类的词语,可是到底“池”是什么意思呢?我讲个故事大家就理解了:在很久很久以前有一家银行,一年之中只有一个客户来办理业务,随着时间的推移 ...
- 1001. 温度转换 (Standard IO)
1001. 温度转换 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 将输入的华氏温度转换为摄氏温度.由华氏温度F与摄氏温度C的转换 ...
- 【2016 ICPC亚洲区域赛北京站 E】What a Ridiculous Election(BFS预处理)
Description In country Light Tower, a presidential election is going on. There are two candidates, ...
- Intelx86数据手册读书笔记---1
1. 第一章 a. 符号约定 a1. 字节顺序 a2. 保留的比特位和软件兼容性 a3. 指令操作数 a4. 十六进制和二进制数 a5. 分段地址 a. 符号约定 a1. 字节顺序 intel的32和 ...
- em,rem区别比较
rem是基于html元素的字体大小来决定,而em则根据使用它的元素的大小决定. 注意:很多人错误以为em是根据父类元素,实际上是使用它的元素继承了父类元素的属性才会产生的错觉. 主要区别 em 和 r ...
- Scala数组操作
数组操作 初始化固定长度的数组 // 初始化长度为10的数组 val array = new Array[Int](10) // 初始化创建含有hello与Scala的数组 val s = Array ...
- Java使用POI导出excel(上)——基本操作
相关的介绍参考自:http://zc985552943.iteye.com/blog/1491546 一.概述 1.概念 受上文博文博主的启发,有必要先对excel的各个概念先做了解! //上述基本都 ...
- 20155207王雪纯 《Java程序设计》实验一报告
20155207王雪纯 <Java程序设计>实验一报告 课程:Java程序设计 班级:1552 指导教师:娄嘉鹏 实验日期:2017.04.07 实验名称:Java开发环境的熟悉(Linu ...
- checkpoint process vs writer process vs wal writer process
开始 我目前的理解是: 如果我执行了一条SQL文,那么 先是相关数据写到 wal buffer里, 然后再写到 data buffer(shared_buffer)里. 这之后, 由于wal wr ...