LeetCode 543.二叉树的直径

题目:

求出一个二叉树的最大直径
直径定义:二叉树中任意两个节点之间的距离,也就是两点之间共有多少条边连通。

思路:

因为每一个节点都只有左子树和右子树两条路径可以走,每走一个点,路径值也就加一。
所以该题目可以转化为求当前节点的左子树节点右子树节点之和的最大值。
可以通过深度优先遍历每次遍历一个节点,就求出当前情况下的最大值,将整个二叉树的节点遍历完,最大值也就求出来了。

该题和LeetCode 124.二叉树中的最大路径和很相似,都利用了分治思想,先递归求子问题的解,再根据子问题的解求出更大的问题的解。

以下为代码+注释:


//定义TreeNode节点
	class TreeNode{
		int val;
		TreeNode left;
		TreeNode right;
		TreeNode(int val){
			this.val = val;
		}
	}
// 设置一个全局变量表示结果maxRes
    int maxRes = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return maxRes;
    }
    public int dfs(TreeNode root){
        if(root == null)
            return 0;
        // 计算当前节点左子树的节点个数
        int l = dfs(root.left);
        // 计算当前节点右子树的节点个数
        int r = dfs(root.right);
        // 每走过一个节点就更新一次结果
        maxRes = Math.max(maxRes, l + r);
        // 返回当前节点下走过的最多节点个数(附带根节点)
        return Math.max(l, r) + 1;
    }

笔者也在不断学习中,如有错误,欢迎指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值