39 二叉树的深度(层次遍历)

树的层次遍历(求树的深度、宽度、之字形打印二叉树等等) 对刷题过程中的牵扯到树的层次遍历的代码总结。 1. 基础版,树的层次遍历java代码的实现(利用的是队列): /** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * ... 阅读详情

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

public class Solution {
    public int TreeDepth(TreeNode root) {
        int leftDepth = 0;
        int rightDepth = 0;
        if(root == null)
            return 0;
        if(root.left==null && root.right==null)
            return 1;
        if(root.left != null){
             leftDepth = TreeDepth(root.left) + 1;
        }
        if(root.right != null){
             rightDepth = TreeDepth(root.right) + 1;
        }
        return (rightDepth > leftDepth) ? rightDepth : leftDepth;
    }
}

使用递归的方法,当root为null时,返回0;当root左右孩子都为null时,返回1;

更简化一点:

public class Solution {
    public int TreeDepth(TreeNode root) {
        int leftDepth = 0;
        int rightDepth = 0;
        if(root == null)
            return 0;
        leftDepth = TreeDepth(root.left) + 1;
        rightDepth = TreeDepth(root.right) + 1;

        return (rightDepth > leftDepth) ? rightDepth : leftDepth;
    }
}

root为null时,返回0;不为null时,返回它的孩子长度+1;

import java.util.*;
public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root == null)
            return 0;
        Queue<TreeNode> queue = new LinkedList();
        TreeNode nlast = null;
        TreeNode last = root;
        int level = 0;
        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();
            if(cur.left != null){
                queue.offer(cur.left);
                nlast = cur.left;
            }
            if(cur.right != null){
                queue.offer(cur.right);
                nlast = cur.right;
            }
            if(cur == last){
                level++;
                last = nlast;
            }
        }
        return level;
    }
}

注意:让last指向当前行的最后一个元素,nlast指向下一行的最后一个 元素,当当前元素cur和last相同的时候,说明当前行已经遍历到了最后一个,它的左右孩子也已经入队了,nlast也指向了下一行的最后一个元素,这时候让last指向nlast即可!

https://blog.youkuaiyun.com/xuchonghao/article/details/79405611

https://blog.youkuaiyun.com/Zheng548/article/details/65935030中有句话很好:求二叉树的深度,有:
1. 递归,这也是很多人非常容易想到的,递归实际也是深度优先的思想(DFS),时间复杂度为O(lgN),但是空间复杂度最坏为O(N),当二叉树退化为链表的时候。
2. 循环,这种方法不会有递归方法容易出现的栈溢出风险。循环其实是广度优先的思想(BFS)。时间复杂度O(N)

【选择判断】作业12-二叉树的遍历 判断题 某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。 某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。 若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为...A...B...,而中序遍历序列为...B...A...。 若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。 某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。 已知一棵二叉树的先序遍历结果是ABC 阅读详情

相关推荐

逆向解析手淘x-sign签名算法:从抓包到API调用的完整实践

本文详细解析了手淘x-sign签名算法的逆向过程,从抓包工具选择到API调用实践,提供了完整的解决方案。通过分析签名参数组成和生成机制,帮助开发者理解并实现淘宝接口的合法调用,同时强调了安全与合规的重要性。

weixin_29323273的博客 606

计算二叉树深度算法(递归、非递归)入门详解

二叉树在应用时,经常需要知道二叉树的深度。二叉树的深度就是二叉树的层数,即从树根算起,到最底下一层的层数是多少,即二叉树中结点的最大层次值。 本文给出了计算二叉树深度的算法,包括递归算法和非递归算法。......

sunnyoldboy博客 3万+

【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题) 实验报告 附代码、数据集

【内附代码与数据集】【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题)

m0_74268508的博客 1293

二叉树的遍历及深度的计算

我们上一篇已经介绍了大量的二叉树知识,这下我们介绍一下其他的知识,接下来我们会了解到二叉树非递归后序遍历的简单版本,还有层序遍历,以及后面的二叉树的深度查找递归,非递归两种版本。这些都会帮助我们在以后的问题中解决很多的事的,所以接下来就要慢慢思考,它里面把好的整体思想。二叉树的根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此下去。深度是指所有结点中最深的结点。

z3551906947的博客 3214

学术类PPT制作总结

本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。

奇妙水果的技术博客,欢迎交流技术~ 2884

从立创商城到Cadence:手把手教你实现封装格式的精准迁移

本文详细介绍了如何从立创商城获取元器件封装并精准迁移至Cadence Allegro的全流程。通过实战案例MAX31865ATP+T芯片,逐步解析Altium Designer格式转换、Cadence环境配置、封装导入验证等关键步骤,提供常见问题解决方案和效率提升技巧,帮助硬件工程师实现封装格式的高效迁移。

weixin_42519985的博客 216

二叉树的层次遍历和最大深度

在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历。前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧!

微信号:RunsenLiu 1650

STM32与小米CyberGear微电机的CAN通信协议深度解析

本文深度解析STM32与小米CyberGear微电机的CAN通信协议,涵盖硬件连接、CAN总线配置、通信协议解析及多电机协同控制。重点介绍了基于STM32的电机控制实践,包括运动模式、速度与位置模式设置,以及数据反馈与故障诊断,为机器人及自动化设备开发提供实用指南。

www00的博客 362

二叉树的层次遍历 & 深度

二叉树的层次遍历 & 利用层次遍历求二叉树的深度

大树先生的博客 6499

等保测评-达梦数据库

一般适用于等保测评

m0_54146694的博客 1298

第0章 《机器人工程师带你入门SLAM》专栏所有文章目录汇总(截止目前115篇文章),方便大家查看阅读

《机器人工程师带你入门SLAM》专栏文章汇总:优快云热销专栏已更新100+篇优质内容,涵盖SLAM技术全栈知识体系。文章分为三大类:1)基础工具与环境配置,包括Ubuntu、Git等必备技能;2)C++编程从入门到进阶,详解变量、类、模板等核心概念;3)SLAM核心库实战,深入解析ROS、Eigen、PCL等关键库的应用。专栏提供从计算机基础到项目实战的系统学习路径,并附代码实例。点击专栏主页可订阅查看全部内容,后续将保持更新。

行知SLAM 1069

LeetCode 热题 100_对称二叉树(39_101_简单_C++)(二叉树;递归(深度);层次遍历(广度))

LeetCode 热题 100_对称二叉树(39_101) 题目描述: 给你一个二叉树的根节点 root , 检查它是否轴对称。 输入输出样例: 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true

huayimenghan的博客 837

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一)

34. 默认格式是BNP format格式,会被Sigrity识别的S参数文件,在仿真完成后,默认会在文件夹中生成bnp和ckt(MCP)文件,无需这步操作。由于port设置的ref Z是50ohm,实际上电源网络的阻抗是没有这么高的,所以S参数回损曲线是基本上全反射的一个状态。Sigrity PowerSI是频域电磁场仿真工具,以下图为例介绍如果用它观测电源的网络的S参数以及阻抗的频域曲线.42. Spice格式的加载进来图标是橙色的,BNP格式的图标是灰色的。

weixin_54787054的博客 1280

二叉树层次遍历

《编程之美》3.10介绍了二叉树层次遍历及从左到右输出每一层,并给出了两个扩展题目。下面是完整的代码实现: View Code 1 #include <iostream> 2 #include <cassert> 3 #include <string> 4 #include <fstream> 5 ...

dayi5933的博客 144

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

102. 二叉树的层次遍历

102. 二叉树的层次遍历题意给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。解题思路递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中;迭代:使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换;实现class Solution(object): def levelOrder(s...

weixin_30307267的博客 83

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[剑指offer]--39 二叉树的深度

温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。 题目: 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 代码思路: 法一:递归法。求二叉树的深度,就是求左子树、右子树的中深度最大的加上...

十里の清风 278

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

牛客题解 | 二叉树的最大深度

牛客题库题解

wc529065的博客 836

二叉树的深度遍历和广度遍历

这些天终于可以闲下来整理一下弥补一下遗忘的知识: 先序,后序,中序针对二叉树。深度、广度针对普通树。深度遍历:从树根开始扫描,顶层扫描完了,从一层最左(也可以右)面的结点往下层扫描,直到下层已无结点,这时所有靠最左(右)的结点全部扫描完毕,从树梢往上退一层,看这层旁有无兄弟结点,有的话还是一样从最左(右)边开始扫描,这是个递归概念,利用这一方法来遍历整棵树。广度遍历:从树根开始扫描,

iwilldoitx的博客 771

39. 二叉树的深度

39.1 求某个二叉树的深度 题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点 (含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:利用递归遍历分别返回左右子树深度 代码实现:时间复杂度:O(n),空间复杂度:O(log n) public int maxDepth(TreeNode root) { if (root == null) { return 0; } int left = maxDepth(root.left); int right = ma

stay hungry ! stay foolish! 215

多叉树的设计、建立、层次优先遍历和深度优先遍历

实现一棵多叉树 实现一棵多叉树 这棵树可以有任意多颗子树 0-n 1 2 3 4 5 6 7 8 输入建立二叉树,输入的格式是每个节点的具体数据和拥有的孩子数目 例如上面的树是这样建成的: 1 3 2 2 5 0 6 0 3 1 7 0 4 1 8 0 1 #include <iostream> 2 #include <vector> 3 ...

好习惯成就伟大 1458

剑指Offer+第39题+二叉树的深度+java

题目(问题1):输入一棵二叉树的根节点,求该数的深度。从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度。 例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的路径包含4个结点(从根结点1开始,经过2和结点5,最终到达叶结点7) 我们可以从另一种角度来理解树的深度。如果一棵树只有一个结点,它的深度为1,如果根节点只有左子树而没有右子...

Quantum_Dog的博客 367

剑指offer-39-二叉树的深度

题目 输入一棵二叉树,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径, 最长路径的长度为树的深度。     二叉树的深度是从根结点到叶子结点的最长路径。若这个树只有一个根节点,则深度为1。 接下来看一下解题思路: 思路一:     若这个树只有一个根节点,则深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1.如果既有左子树又有右子树,那该树的深度就是其左、右子树深度较大

CodAlun的博客 199

一刷剑指offer(39)——二叉树的深度

题目: 输入一颗二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 二叉树结点定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; 递归: ...

张小白的博客 323

【面试题39】二叉树的深度

【题目描述】 输入一棵二叉树的根结点,求该树的深度。 【解决方案】 递归解决。 我的代码实现,仅供参考: 1 public static int TreeDepth(TreeNode root) 2 { 3 if (root == null) 4 return 0; 5...

aejt95023的博客 162

java 二叉树的深度 非递归算法_数据结构5_java---二叉树,树的建立,树的先序、中序、后序遍历(递归和非递归算法),层次遍历(广度优先遍历),深度优先遍历,树的深度(递归算法)...

1、二叉树的建立首先,定义数组存储树的data,然后使用list集合将所有的二叉树结点都包含进去,最后给每个父亲结点赋予左右孩子。需要注意的是:最后一个父亲结点需要单独处理1 public staticTreeNode root;2 //建立二叉树内部类3 classTreeNode{4 public Object data; ...

weixin_39843093的博客 279

38 二叉树的深度

题目要求:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路一:递归的方式 时间复杂度为O(n) 空间复杂度为O(n) 该方法存在堆栈溢出的风险,树的深度如果非常非常非常大是会出现栈的溢出的 1 import java.lang.Math; 2 public class Solution { 3 ...

weixin_30776545的博客 137
上一篇: 38 数字在排序数组中出现的次数(改正了二分查找的等于号)
下一篇: 39 平衡二叉树(深度+非递归/递归+后序)
Mr_Curious_
博客等级 码龄10年 34粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值