算法 - 剑指Offer I. 二叉树的深度

news/2024/7/20 23:09:25 标签: 算法, 深度优先

题目

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

解题思路

这题很简单, 这里列出BFS和DFS得到解题方式,分别用队列和递归去计算其深度,BFS和之前的打印树二维数组很像可以看那里的解释,这里解释下DFS的递归函数,首先使用了取最大值得方法, 如果左边深度更深就用左边的, 反之用右边的, 相同则深度一致,代码如下。

Java代码实现

import java.util.*;

public class MaxDepth {
    public class TreeNode {
       int val;
       TreeNode left;
       TreeNode right;
       TreeNode(int x) { val = x; }
   }
    public int maxDepth(TreeNode root) {
        Queue<TreeNode> queue =  new LinkedList();
        if(root != null){
            queue.add(root);
        }else{
            return 0;
        }
        int depth = 0;
        while(!queue .isEmpty() ){
            Queue tmp = new LinkedList();
            for (TreeNode node : queue) {
                if(node.left != null){
                    tmp.add(node.left);
                }
                if(node.right != null){
                    tmp.add(node.right);
                }
            }
            queue = tmp;
            depth ++ ;
        }
        return depth;
    }
    public int maxDepthDFS(TreeNode root) {
        if(root == null){
            return 0;
        }
        return Math.max(maxDepthDFS(root.left), maxDepthDFS(root.right)) + 1;
    }
}

http://www.niftyadmin.cn/n/55166.html

相关文章

LeetCode-226. 翻转二叉树

目录题目分析前序遍历中序遍历后序遍历题目来源226. 翻转二叉树题目分析 如果要从整个树来看&#xff0c;翻转还真的挺复杂&#xff0c;整个树以中间分割线进行翻转&#xff0c;如图&#xff1a; 可以发现想要翻转它&#xff0c;其实就把每一个节点的左右孩子交换一下就可以了…

2022年11月软考领证通知

纸质证书领取时间 根据往年各地软考证书的领取时间看&#xff0c;上半年软考证书领取一般在10月底陆续开始&#xff0c;下半年的证书领取时间一般在次年2/3月份左右开始&#xff08;各地证书领取具体时间不一样&#xff0c;届时请多留意当地证书领取通知。&#xff09; 1、证…

获取成员userID

文章目录一、简介二、获取token1、获取秘钥2、获取Token三、获取部门数据1、获取部门列表2、获取子部门ID列表3、获取单个部门详情四、获取成员信息1、读取成员2、获取部门成员3、获取部门成员详情一、简介 同步数据到企微&#xff1a; 企业如果需要从自有的系统同步通讯录到…

Python-项目实战--飞机大战-敌机出场(6)

目标使用定时器添加敌机设计Enemy类1.使用定时器添加敌机敌机出现出现的规律&#xff1a;游戏启动后&#xff0c;每隔1秒会出现一架敌机每架敌机向屏幕下方飞行&#xff0c;飞行速度各不相同每架敌机出现的水平位置也不尽相同当敌机从屏幕下方飞出&#xff0c;不会再飞回到屏幕…

【Java基础】——面向对象:多态

【Java基础】——面向对象&#xff1a;多态一、多态性1、多态性的理解2、何为多态性&#xff1a;3、多态性的使用&#xff1a;虚拟方法调用4、多态性的使用前提&#xff1a;5、多态性的应用举例&#xff1a;6、多态性使用的注意点&#xff1a;二、object类的使用1、java.lang.O…

c++11 标准模板(STL)(std::multimap)(三)

定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…

社交登陆OAuth2.0

QQ、微博、github 等网站的用户量非常大&#xff0c;别的网站为了 简化自我网站的登陆与注册逻辑&#xff0c;引入社交登陆功能&#xff1b; 步骤&#xff1a; 1&#xff09;、用户点击 QQ 按钮 2&#xff09;、引导跳转到 QQ 授权页 3&#xff09;、用户主动点击授权&#xff…

移除元素-力扣27-java

一、题目描述给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新…