Diameter of Binnary Tree

在这里插入图片描述
二叉树直径的定义就是距离最长的两个结点所经过边的数目,由给定的Example可知,二叉树的直径可以近似地看作是左右子树的层数之和(左子树层数为2,右子树层数为1),为什么说是近似呢,因为可能最终找到的两个结点不经过根节点即两个结点来自同一边子树。如下图所示,最终找到的两个结点8和9,直径是6:在这里插入图片描述
用mx=-1来保存当前求的的最大距离
具体的求解步骤如下:
node 8
left=0,right=0
level=max{left,right}+1=1
mx=max{mx,left+right}=0

node 6
left=1,right=0
level=max{left,right}+1=2
mx=max{mx,left+right}=1

node 4
left=2,right=0
level=max{left,right}+1=3
mx=max{mx,left+right}=2

node 9
left=0,right=0
level=max{left,right}+1=1
mx=max{mx,left+right}=2

node 7
left=0,right=1
level=max{left,right}+1=2
mx=max{mx,left+right}=2

node 5
left=0,right=2
level=max{left,right}+1=3
mx=max{mx,left+right}=2

node 2
left=3,right=3
level=max{left,right}+1=4
mx=max{mx,left+right}=6

node 3
left=0,right=0
level=max{left,right}+1=1
mx=max{mx,left+right}=6

node 1
left=4,right=1
level=max{left,right}+1=5
mx=max{mx,left+right}=6
故最终结果mx=6即为该二叉树的最大距离

具体的Java代码如下

static int mx;		
    public int diameterOfBinaryTree(TreeNode root) {
    	if(root==null)
    		return 0;
    	mx=-1;
    	int dj=CalcuLevel(root);
    	return mx;
    }
    public int CalcuLevel(TreeNode root) {
    	if(root==null) {
    		return 0;
    	}
    	int left=CalcuLevel(root.left);
    	int right=CalcuLevel(root.right);
    	int level=Math.max(left, right)+1;
    	mx=Math.max(left+right, mx);
    	return level;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值