• 二叉树的深度


    题目描述

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

    题目格式要求:

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public int TreeDepth(TreeNode root) {
            
        }
    }

    解题思路:

    前不久刚学了动态规划,在这里“假装”用动态规划分析一下,为什么是假装呢?因为我也不知道自己是不是用的动态规划~。感觉挺像的。。。

    (关于动态规划,再次推荐一下这篇文章:漫画:什么是动态规划

    动态规划有三个分析条件  ---------  最优子结构,边界,状态转移公式

    1 . 首先看一下最优子结构。

    对于根节点来说如果已经知道了左子树和右子树的节点,那么我们就可以得到根节点的深度是4.

    再抽象一下,把2和3换成是X和Y

    那么根节点的深度就应该是

    (X > Y ? X : Y) + 1

    再用同样的方法去推导左子树和右子树,就可以得到相应的关系式了。

    2、状态转移公式

    从上面的分析不难看出状态转移公式可以写成下面这个样子。

    Depth(root) =( Depth(root.left) > Depth(root.right) ?  Depth(root.left) : Depth(root.right) ) + 1

    3、边界条件

    a. 如果root是null,那就代表没有这个节点,返回0

    b. 如果root的左右孩子节点都为空,说明这是一个叶子节点,那么它的深度就返回1

    最后的代码:

    public class Solution {
        public int TreeDepth(TreeNode root) {
            if(root == null) { return 0; }
            if(root.left == null && root.right == null) { return 1; }
    int left = TreeDepth(root.left) ; int right = TreeDepth(root.right) ; return (left > right ? left : right) + 1; } }
  • 相关阅读:
    JAVA 一个接口多个实现类
    关于Web服务器
    美团买菜IOS版设备风控浅析与算法还原
    阿里App防Bot新版AliTigerTally方案浅析与算法还原1
    使用php的openssl_encrypt和python的pycrypt进行跨语言的对称加密和解密问题
    一个把人民币小写转换为大写中文的方法
    《重构》代码坏味道
    git 合并分支
    java中SPI机制 代码改变世界
    echo print print_r的区别
  • 原文地址:https://www.cnblogs.com/bax-life/p/9863263.html
Copyright © 2020-2023  润新知