二叉树的结构

二叉树是比较常见的一种的一种数据结构。

首先看看二叉树的数据结构:

//由左节点和右节点以及一个节点值构成   
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版>的更多相关文章

  1. 剑指offer【08】- 二叉树的深度(java)

    题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题, ...

  2. 实现二叉树的基本操作(Java版)

    近期研究了一下二叉树,试着用Java语言实现了二叉树的基本操作,下面分享一下实现代码: package com.sf.test; import java.util.ArrayDeque; import ...

  3. 二叉树的宽度<java版>

    二叉树的宽度 思路:层序遍历的时候,记录每层的节点数量,最后取记录中的最多的数量. 代码实现: public int solution(TreeNode node){ LinkedList<Tr ...

  4. 《剑指offer》面试题19 二叉树的镜像 Java版

    书中方法:这道题目可能拿到手没有思路,我们可以在纸上画出简单的二叉树来找到规律.最后我们发现,镜像的实质是对于二叉树的所有节点,交换其左右子节点.搞清楚获得镜像的方法,这道题实际上就变成了一道二叉树遍 ...

  5. 将一个二叉树左右翻转(Java 版)

    public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; ...

  6. 剑指Offer面试题39(Java版):二叉树的深度

    题目:输入一棵二叉树的根节点,求该数的深度. 从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度. 比如.例如以下图的二叉树的深度为4.由于它从根节点到叶结点的最 ...

  7. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  8. 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

    将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...

  9. 【剑指offer】Java版代码(完整版)

    原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一.引言 <剑指offer>可谓是程序猿面试的神书了,在面试中 ...

随机推荐

  1. Gradle Goodness: Excluding Tasks for Execution

    In Gradle we can create dependencies between tasks. But we can also exclude certain tasks from those ...

  2. Java并发编程(三)什么是线程池

    什么是线程池 学习编程的小伙伴们会经常听到“线程池”.“连接池”这类的词语,可是到底“池”是什么意思呢?我讲个故事大家就理解了:在很久很久以前有一家银行,一年之中只有一个客户来办理业务,随着时间的推移 ...

  3. 1001. 温度转换 (Standard IO)

    1001. 温度转换 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   题目描述 将输入的华氏温度转换为摄氏温度.由华氏温度F与摄氏温度C的转换 ...

  4. 【2016 ICPC亚洲区域赛北京站 E】What a Ridiculous Election(BFS预处理)

    Description In country Light Tower, a presidential election is going on. There are two candidates,   ...

  5. Intelx86数据手册读书笔记---1

    1. 第一章 a. 符号约定 a1. 字节顺序 a2. 保留的比特位和软件兼容性 a3. 指令操作数 a4. 十六进制和二进制数 a5. 分段地址 a. 符号约定 a1. 字节顺序 intel的32和 ...

  6. em,rem区别比较

    rem是基于html元素的字体大小来决定,而em则根据使用它的元素的大小决定. 注意:很多人错误以为em是根据父类元素,实际上是使用它的元素继承了父类元素的属性才会产生的错觉. 主要区别 em 和 r ...

  7. Scala数组操作

    数组操作 初始化固定长度的数组 // 初始化长度为10的数组 val array = new Array[Int](10) // 初始化创建含有hello与Scala的数组 val s = Array ...

  8. Java使用POI导出excel(上)——基本操作

    相关的介绍参考自:http://zc985552943.iteye.com/blog/1491546 一.概述 1.概念 受上文博文博主的启发,有必要先对excel的各个概念先做了解! //上述基本都 ...

  9. 20155207王雪纯 《Java程序设计》实验一报告

    20155207王雪纯 <Java程序设计>实验一报告 课程:Java程序设计 班级:1552 指导教师:娄嘉鹏 实验日期:2017.04.07 实验名称:Java开发环境的熟悉(Linu ...

  10. checkpoint process vs writer process vs wal writer process

    开始 我目前的理解是: 如果我执行了一条SQL文,那么 先是相关数据写到  wal buffer里, 然后再写到 data  buffer(shared_buffer)里. 这之后, 由于wal wr ...