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

二叉树的最大深度

作者: 追梦小蜗牛 | 来源:发表于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;
        }
    

    总结:

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

    相关文章

      网友评论

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

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