输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

代码

解法一

static class TreeNode {

int val;

TreeNode left;

TreeNode right;

public TreeNode(int val) {

this.val = val;

}

}

/**

* 递归求深度

* @param root

* @return

*/

public static int treeDepth(TreeNode root) {

if (root == null) {

return 0;

}

// 计算左子树的深度

int left = treeDepth(root.left);

// 计算右子树的深度

int right = treeDepth(root.right);

// 树root的深度=路径最长的子树深度 + 1

return left >= right ? (left + 1) : (right + 1);

}

解法二

/**

* 非递归,借助栈来计算深度(层数)

* 比如 root,先放入栈中

* 5 当前栈的元素数量为1,len=1,取出栈中此时所有的元素,即5,然后将其子节点3和7放入栈中

* 3 7 当前栈的元素数量为2,len=2,所以连续从栈中pop两次,使栈中不在含有该层元素,同时将下层节点2和4放入栈中

* 2 4 当前栈的元素数量为2,len=2,所以连续从栈中pop两次

* 记录深度,所以每次pop出栈中所有元素(某层的所有节点)只需深度+1,即depth++

* @param root

* @return

*/

public static int treeDepth2(TreeNode root) {

if (root == null) {

return 0;

}

// 初始化深度

int depth = 0;

// 存放每层树节点的栈

Stack stack = new Stack<>();

// 将树的根(即第一层)放入栈中

stack.push(root);

while (!stack.isEmpty()) {

// 当栈不为空时,层数+1,

// 因为每次都会pop出当前层的所有节点,并将该层所有节点的子节点放入栈中

depth++;

// 当前栈中元素的数量

int length = stack.size();

while (length-- > 0) {

// 取出栈中所有的节点,并将对应节点的子节点放入栈中

TreeNode node = stack.pop();

if (node.left != null) {

stack.push(node.left);

}

if (node.right != null) {

stack.push(node.right);

}

}

}

return depth;

}

java 深度二叉树_Java 实现二叉树的深度相关推荐

  1. java有内置二叉树_java数据结构——二叉树

    一.树概述 树是一种特殊的数据结构,他可以用来描述有分支的结构是由一个或者一个以上的有限集合组成,具有两个属性:一是存在一个特殊的节点,成为树根:二是其余节点分为n>=0个互斥集合,T1,T2, ...

  2. java构建二叉树_java实现二叉树的构建以及3种遍历方法

    packagetest;importjava.util.LinkedList;importjava.util.List;/*** 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考 ...

  3. java 遍历二叉树_java实现二叉树遍历的三种方式

    本文实例为大家分享了java实现二叉树遍历的具体代码,供大家参考,具体内容如下 二叉树如下: 遍历结果如下: 以下是实现代码: package binTree; import java.util.St ...

  4. 32位java怎么改_java修改24位深度png图片为32位深度

    前言 在做图片切割时,发现切除来的图片空白部分变成了黑色背景,发现属性是24位深度 解决方案 1.先上代码 BufferedImage image = readImage(url); Buffered ...

  5. java二叉树是什么_java数据结构二叉树是什么?特点是?

    二叉树是什么?学习java的小伙伴可能经常会听到这个词,但具体是什么又不可知,下面小编就来带你详细了解下二叉树. 二叉树概念 二叉树,指计算机中的一种树结构,这种树结构中每个结点至多只有两个子树,它们 ...

  6. 数据结构之二叉树(遍历、建立、深度)

    数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...

  7. 二叉树(遍历、建立、深度)

    1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历二叉树.中序遍历二叉树.后序遍历二叉树 ...

  8. 完全二叉树最小深度_树与二叉树递归c++

    树(Tree) 1.什么是树? 树是n个结点的有限集合. 当n=0时,称为空树.而任意非空树应满足: a.有且仅有一个特定的根结点.如"E"是该树的根结点. b.当n>1时, ...

  9. [AGC009B] Tournament(多叉树转二叉树后的最小可能深度)

    传送门 把aia_iai​看成faifa_ifai​,建出一棵多叉树,再把多叉树转成二叉树,转出来的每棵二叉树对应着一种比赛方式. 以n=8,a2,...,8=1,1,2,4,3,3,3n=8,a_{ ...

最新文章

  1. C++基础学习笔记001
  2. MetaSploit攻击实例讲解------攻击445端口漏洞(kali linux 2016.2(rolling))(详细)
  3. 华中科技大学应用高等工程数学_专业解析【第152期】| 机械电子工程课程设置及研究方向...
  4. PHP数组的详细解读
  5. Programming in the Mid-Future(转)
  6. Could not create the view An unexpected exception……的问题
  7. 修复Webots在ubuntu下安装出现的一些依赖问题
  8. java冒泡排序图解_[图解] 冒泡排序
  9. 常用网络端口用处归纳
  10. 小米手机获取root权限最常见问题
  11. #大话设计模式之适配器模式#
  12. Myeclipse反向工程后造成的SQL syntax
  13. python入门--常用的numpy函数:arange()
  14. PAT乙级10016题——C语言
  15. 智慧社区管理平台该如何选择?
  16. 画一个带统计检验的PcOA分析结果 (再进一步,配对比较)
  17. 软件工程复习笔记 顺序图(时序图)
  18. camera face
  19. 免费可商用图片素材、高清无版权图片、免费可个人和商业用途图片
  20. 深度GHOST XP快速装机版V6.5

热门文章

  1. fatal: 无法访问 LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
  2. Mac 查看隐藏文件
  3. Spark SQL内核剖析(三)
  4. 最新emoji表情代码大全_早安不用打字都懂的聊天暖心动态祝福图片 最新聊天不用打字问候关心话动态表情大全...
  5. 服务器中的SAS硬盘简介
  6. 一些大中型通用计算机的运算器既能进行,行政鉴定主要解决的是:A. 问题是否属于医疗事故的问题和赔偿调解问题B. 给双方当事人一个说法...
  7. java破坏双亲委派_JDK为何自己先破坏双亲委派模型?
  8. vue+ElementUI实现表关联
  9. 我要第一!!!!!!!
  10. ubuntu22.04安装ruby2.7遇到的坑(rvm方式)