美文网首页
二叉树的最大深度

二叉树的最大深度

作者: 追梦小蜗牛 | 来源:发表于2019-12-17 20:14 被阅读0次
woman-posing-on-a-concrete-post-3285405.jpg

需求:

给定一个二叉树[3,9,20,null,null,15,7],计算出它的最大深度。

分析:

如果仅仅是依据上面的一句话,让你直接写代码,猛然间,好像不知道如何下手...这是因为平常我们在工作中写的代码都是简单的定义几个类,然后注入,写业务代码,就可以直接使用了。针对上面这个需求,我们需要做如下几个步骤:
1、要想用代码写出来,就需要运用我们的抽象思维,想想用什么数据结构来实现。
2、结合二叉树的一些知识,二叉树各个节点上面有一个整形值,然后每个节点下面由左子树(可为空)和右子树(可为空)组成,我们可以定义一个类Node,然后在里面再定义一个整形变量,和两个Node类型的实例变量。
3、定义好数据结构之后,紧接着就要设计算法来实现了,结合二叉树的特点,这里用递归实现。
4、定义好之后,就可以造点数据来测试验证了。

源码:

    public static void main(String[] args) {
        Node root = initializeData();
        int maxDepth = calculateMaxDepth(root);
        System.out.println(maxDepth);
    }

    private static int calculateMaxDepth(Node node) {
        if (node == null) {
            return 0;
        }
        System.out.println(node.getValue());//输出当前节点的值
        int leftDepth = calculateMaxDepth(node.getNodeLeft())+1;//左子树的深度(左子树也包括右子树(参考二叉树定义))
        int rightDepth = calculateMaxDepth(node.getNodeRight())+1;//右子树的深度(右子树也包括左子树(参考二叉树定义))

        return Math.max(leftDepth,rightDepth);//针对根节点的左子树比较一次左和右的大小,同样针对根节点的右子树比较一次左和右的大小,然后比较最终的大小
    }

    private static Node initializeData() {
        Node root = new Node(3);
        Node node9 = new Node(9);
        Node node20 = new Node(20);
        Node node15 = new Node(15);
        Node node7 = new Node(7);
//        Node node30 = new Node(30);
//        Node node31 = new Node(31);

        root.setNodeLeft(node9);
        root.setNodeRight(node20);
        node20.setNodeLeft(node15);
        node20.setNodeRight(node7);
//        node9.setNodeLeft(node30);
//        node9.setNodeRight(node31);

        return root;
    }

总结:

其实递归这个算法,我自己感觉刚开始的时候是不太好理解的。必须去打断点,一步一步的去跟踪,慢慢的体会它的思想。递归的本质其实是栈的调用,会把某一次调用涉及到的变量值和中间结果,都暂存起来,当最后一次调用结束时会一层一层的返回,最终执行完,结合它的本质思想,会好理解一点。把握当下,起点就是当下。觉察即自由。

相关文章

  • 二叉树面试题基本问题

    二叉树的最大深度与最小深度 二叉树的最大深度 最大深度是指二叉树根节点到该树叶子节点的最大路径长度。而最小深度自然...

  • 二叉树最大最小深度的递归非递归实现

    一、二叉树最大深度 二叉树的最大深度是根节点到叶子节点的最大长度 1.1 最大深度的递归实现 传入根节点,得到左右...

  • 104. Maximum Depth of Bianry Tre

    题目 求二叉树的最大深度 解析 二叉树的最大深度,是左子树深度加 1 和右子树深度加 1 的最大值。即 f(nod...

  • 二叉树的深度系列

    LeetCode 104 二叉树的最大深度 题目 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节...

  • LeetCode-104-二叉树的最大深度

    LeetCode-104-二叉树的最大深度 104. 二叉树的最大深度[https://leetcode-cn.c...

  • LeetCode | 树相关题目

    LeetCode 104.二叉树的最大深度 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最...

  • LeetCode 深度优先遍历

    概述 前言 104 二叉树的最大深度【简单】 111 二叉树的最小深度 【简单】 124 二叉树中的最大路径和 【...

  • leetcode上二叉树和递归 java

    二叉树天然的递归结构104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节...

  • Swift 二叉树的最大深度- LeetCode

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

  • (初级)4.二叉树的最大深度

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

网友评论

      本文标题:二叉树的最大深度

      本文链接:https://www.haomeiwen.com/subject/afeenctx.html