JZ55 二叉树深度

其实树这个算法绕开了好久,因为一直都不会搞,每次都是试探着写。今天写,却发现流畅了些(我才不承认是因为写的简单分类的原因呢😕)

有可能是最近递归有了一点点感觉,也有可能是前两天算法题中涉及过深度的?

题目

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

思路

如题目一样,找树的深度。树简直是为了递归量身定做的。唔,也许动态规划也行?不过我目前还不太行。

    3
   / \
  9  20
    /  \
   15   7

大概是这个意思,先一直往下找,找到没有子树的结点。比如15和7。此时这两个结点都为零,然后往前找。

比如15和7到20值变成1,20到3变成2

9本来为0,到3是1.

2大于1,所以选2

代码

public int maxDepth(TreeNode root) {
	if(root == null) return 0;
	return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}

还有一道类似的,也许深度搜索的,所以这里就不写出来了:JZ79 判断是不是平衡二叉树

class Solution {
    public boolean isBalanced(TreeNode root) {
        //空树自然是平衡树啦
        if(root == null) return true;
        //相对函数左右子树之差小于2是平衡树
        if(Math.abs(dfs(root.left)-dfs(root.right))<2) {
            //判断其子树是否是平衡树
            return isBalanced(root.left)&&isBalanced(root.right);
        }
        return false;
    }
    //二叉树深度
    public int dfs(TreeNode root) {
        if(root == null) return 0;
        return Math.max(dfs(root.left),dfs(root.right))+1;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨_浅-

你的一毛/分钱是我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值