算法通关村——轻松搞定最大深度问题

8 篇文章 0 订阅
4 篇文章 0 订阅

前言

二叉树的深度:从根节点到当前节点的最长简单路径边的条数

题目

        给定一个二叉树,找出其最大深度,二叉树的深度为根节点到最远叶子节点的最长路径上的节点数

说明

        如下图所示,对于node(3) , 最大深度自然是左右子节点+1,左右子节点有的可能为空,只要有一个,树的最大高度就是1+1=2.

        对于node(20),最大深度自然是左右子节点+1,左右子节点有的可能为空,只要有一个,树的最大高度就是1+1=2.用代码表示就是

                        int  depth  = 1 + max(leftDepth,rightDepth);

而对于3,则是左右子树深度最大的那个然后再+1,具体谁更大,则不必关心。所以对于node(3)的判断逻辑就是:

                        int leftDepth = getDepth(root.left);            // 左

                        int rightDepth = getDepth(root.right);        // 右

                        int depth = 1 + max(leftDepth,rightDepth); // 中

image.png

        当root == null的时候返回0 

 二叉树的最大深度问题

代码实现
public int getDepth(TreeNode root){
    if(root == null){
        return 0;
    }
    int leftDepth = getDepth(root.left);
    int rightDepth = getDepth(root.right);
    return Math.max(leftDepth,rightDepth)+1;
    
}

N叉树的最大深度问题

代码实现

N叉树的定义

class MutilTreeNode {
    public int data ;
    public List<MutilTreeNode> children;

    public MutilTreeNode() {
    }

    public MutilTreeNode(int data) {
        this.data = data;
    }

    public MutilTreeNode(int data, List<MutilTreeNode> children) {
        this.data = data;
        this.children = children;
    }
}

方法实现 

public int maxDepth(MutilTreeNode root){
    if(root == null){
        return 0;
    }
    if(root.children.isEmpty){
        return 1;
    }else{
        List<Integer> height = new ArrayList<>();
        for(MutilTreeNode child : root.children){
            height.add(maxDepth(child));
        }
        return Collections.max(height);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值