首页 > 其他分享 >5.二叉树的最大深度

5.二叉树的最大深度

时间:2023-12-11 15:22:05浏览次数:34  
标签:return 最大 int public que 二叉树 深度 root 节点

104. 二叉树的最大深度

1、概要

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

可以使用前序求深度,也可以使用后序求高度。

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)

根节点的高度就是二叉树的最大深度

2、思路

递归法

  • 递归函数的参数和返回值

树的根节点,返回深度int类型

public int traverse(TreeNode root)
  • 终止条件

空节点返回0

	if(root == null){
            return;
        }
  • 单层递归

先求左子树深度,再求右子树深度,最后取左右最大值+1(算上当前中间节点)就是目前节点为根节点的树的深度。

int leftNum = traverse(root.left);
        int rightNum = traverse(root.right);

        return Math.max(leftNum,rightNum)+1;

迭代法

层序遍历模版,每层深度+1

3、代码

class Solution {
  

    public int maxDepth(TreeNode root){
        //return traverse(root);

        return order(root);
    }

    public int order(TreeNode node){
        if(node == null){
            return 0;
        }
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(node);
        //深度计数器
        int len = 0;

        while(!que.isEmpty()){
            
            int deep = que.size();

            while(deep> 0){
                TreeNode cur = que.poll();
                
                if(cur.left!=null){
                    que.offer(cur.left);
                }
                if(cur.right!=null){
                    que.offer(cur.right);
                }
                deep--;
            }
            //深度累加
            len++;
        }
        return len;
    }
    
     public int traverse(TreeNode root){//后序
        if(root == null){
            return 0;
        }

        int leftNum = traverse(root.left);
        int rightNum = traverse(root.right);

        return Math.max(leftNum,rightNum)+1;
    }


}

4、相关题目

559. N 叉树的最大深度

class Node {

public int val;

public List children; //集合,可以用get获取

public Node() {}

public Node(int _val) {

​ val = _val;

}

public Node(int _val, List _children) {

​ val = _val;

​ children = _children;

}

N叉树定义,值与孩子

class Solution {
    
    public int maxDepth(Node root) {
        
        //return reCurSion(root);
        return iTeRation(root);

    }

    private int reCurSion(Node root){
        if(root == null){return 0;}

        int depth = 0;

        if(root.children !=null){
            for(Node child : root.children){
                depth = Math.max(depth,maxDepth(child));
            }
        }
        return depth +1;
    }
    private int iTeRation(Node root){
        if(root == null){return 0;}
        int depth = 0;
        Queue<Node> que = new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty()){
            depth++;
            int len = que.size();
            while(len > 0){
                Node cur = que.poll();
                for(int i=0;i<cur.children.size();i++){
                    if(cur.children.get(i) != null){
                        que.offer(cur.children.get(i));
                    }
                }
                len--;
            }
        }
        return depth;
    }
    
}

标签:return,最大,int,public,que,二叉树,深度,root,节点
From: https://www.cnblogs.com/autumnmoonming/p/17894517.html

相关文章

  • C++U5-09-二叉树2
    二叉树(二)二叉树遍历是一种重要的操作,它在许多应用场景中被广泛使用。以下是一些常见的应用场景:查找和搜索:二叉树遍历可以用于查找特定元素或者进行搜索操作。通过遍历整棵树,可以找到目标元素并进行相应的处理。例如,在二叉搜索树中查找某个特定值,或者在字典树中搜索以某个前缀......
  • 深度学习在植物表型研究中的应用现状与展望
    目录介绍一篇浙江大学发表的一篇深度学习在植物表型组研究的综述:岑海燕,朱月明,孙大伟,等.深度学习在植物表型研究中的应用现状与展望[J].农业工程学报,2020,36(9):1-16.本文首先概述了植物表型与深度学习方法的背景;随后从植物识别与分类、胁迫分析、产量预测、面向精准育种和精......
  • 111. 二叉树的最小深度
    目录题目完美踩坑题解题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。示例1:输入:root=[3,9,20,null,null,15,7]输出:2示例2:输入:root=[2,null,3,null,4,null,5,null,6]输出:5完美踩坑之前好几个题做过求树的高......
  • 代码随想训练营第六十天(Python)| 84. 柱状图中最大的矩形
    84.柱状图中最大的矩形1、双指针classSolution:deflargestRectangleArea(self,heights:List[int])->int:n=len(heights)#左右第一个小于i的下标min_l,min_r=[0]*n,[0]*nres=0min_l[0]=-1......
  • 12.1邻接表存储实现图的深度优先遍历
    掌握深度优先遍历实验题目邻接表存储实现图的深度优先遍历设计文档 代码#include<iostream>usingnamespacestd;#defineMVNum100typedefcharOtherInfo;intvisited[MVNum]={0};//visited数组,用于记录顶点是否被访问过//邻接表:顶点表、边表、邻接表typede......
  • 深度解读DBSCAN聚类算法:技术与实战全解析
    探索DBSCAN算法的内涵与应用,本文详述其理论基础、关键参数、实战案例及最佳实践,揭示如何有效利用DBSCAN处理复杂数据集,突破传统聚类限制。关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里......
  • 数据结构--二叉树的生成和遍历(9)
    好久没有更新博客了,关于二叉树也查了不少资料,下面写上我对二叉树的理解。一、什么是二叉树二叉树是一种树形结构,其中每个节点的叶子节点不超过两个,而且二叉树的左右子树是有顺序的,顺序不能颠倒如下图所示,一下四种都属于二叉树。  二、特殊的二叉树1.满二叉树:听名......
  • 【JavaSE】数据结构(树:二叉查找树、平衡二叉树、AVL树、红黑树)
    树度:每个节点的子节点数量树高:树的总层数根节点:入度为0的节点二叉树每个节点最多有两个子节点二叉查找树任意节点左子树上的节点都小于当前节点,右子树上的节点都大于当前节点平衡二叉树任意节点的左右子树的高度差不超过1AVL树AVL树是一种平衡二叉树,得名于其发明者的......
  • 在OpenCV基于深度学习的超分辨率模型实践
    1.引言OpenCV是一个开源的计算机视觉库,拥有大量优秀的算法。基于最新的合并,OpenCV包含一个易于使用的接口,主要用于实现基于深度学习方法的超分辨率(SR)。该接口包含预先训练的模型,这些模型可以非常容易和有效地用于推理。在这篇文章中,我将解释它可以做什么,并逐步展示如何使用它。闲......
  • 110. 平衡二叉树
    目录题目自顶向下自顶向下正解自底向上(优)题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。自顶向下首先,对当前节点进行处理,计算左孩子的高度,右孩子的高度,两者高度差若大......