二叉树结点最远距离

给定一个二叉树,要找到树中任意两个节点之间的最远距离。通过后序遍历,分析三种情况:根节点的左右子树最大距离、跨越根节点的最大距离。在遍历过程中记录左子树和右子树的最大距离及其到根节点的最远距离,最终返回这两个距离中的较大值。
摘要由CSDN通过智能技术生成

题目

给定二叉树,求取该二叉树多有节点中距离最远的结点相隔的距离

分析

以root为根节点的树上,最大距离求取
情况一:root的左子树上的最大距离
情况二:root的右子树上的最大距离
情况三:root左子树上距离root结点最远的距离,加上root自身这个节点,再加上root右子树上距离root右孩子最远的距离
三个值中最大的即为所求

思路

1、整个过程为后序遍历,在二叉树的每棵子树上指向步骤2
2、假设子树头root,处理root的左子树,得到两个信息,左子树上的最大距离记为LMax1,左子树上距离root左孩子的最远距离记为LMax2。处理root右子树得到右子树上的最大距离记为RMax1,距离root右孩子的最远距离记为RMax2。那么跨root结点情况下的最大距离为LMax2+1+RMax2,这个值与LMax1和RMax1比较,最大值即为所求
3、LMax2+1就是root左子树上距离root最远的点到root的距离
RMax2+1就是root右子树上距离root最远的点到root的距离
两者中最大的一个作为root树上距离root最远的距离返回
4、用返回长度为2的数组的方式,可以做到返回两个值

代码实现

/**
 * 从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当
 * 到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。
 * 给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值