剑指offer面试题55-I-二叉树的深度(java)

题目描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
在这里插入图片描述
方法

后序遍历 — 递归
这道题的关键点在于
这个树的深度和左子树,右子树深度之间的关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法步骤

  1. 如果根节点不存在,说明树不存在,深度为0,返回0.
  2. 然后递归算左子树的深度,在递归算右子树的深度
  3. 最后返回左子树深度和右子树深度的最大值在+1(根节点)
class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left+1,right+1);
    }
}

class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;//如果节点为0,树的深度为0
        int left = maxDepth(root.left);//递归左子树的节点
        int right = maxDepth(root.right);//递归右子树的节点
        return Math.max(left+1,right+1);//找到左右子树的最大值然后加上根节点就是树的深度
    }
}

相关题

N叉树的最大深度
题目描述

给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
在这里插入图片描述
思路:

这道题和上面的二叉树的深度很像,因为2叉树也可以看作一个N=2的N叉树。
每次递归找到子树的最大深度,然后返回最大子树深度+根节点1。

算法步骤
1.判断树是否为空,子树是否为空
2.定义一个变量用来存储深度的最大值max
3.如果子树不为空,遍历子树的节点
4.比较子树的节点和深度最大值谁大,如果子树的节点大,就赋值给深度最大值max
5.然后返回深度最大值加上根节点的1(max+1
class Solution {
    public int maxDepth(Node root) {
        if(root == null) return 0;
        if(root.children == null || root.children.size() == 0) return 1;//没有子树
        int max = 0;//深度的最大值
        for(int i = 0; i < root.children.size() ;i++){
            int depth = maxDepth(root.children.get(i));//子树的深度最大值
            if(depth > max){
                max = depth;//子树深度赋值给深度最大值
            }
        }
        return max + 1;//深度最大值+根节点 1
    }
}

参考
https://blog.csdn.net/qq_43590771/article/details/109771346

如果那里理解不对,欢迎指正,谢谢~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值