二叉树的深度

 

 

题目描述

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

 

题目格式要求:

 

复制代码
复制代码
/**
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; } }
复制代码
复制代码
posted @   大浪不惊涛  阅读(197)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2019-01-22 plsql解决中文乱码
点击右上角即可分享
微信分享提示