【二叉树】求二叉树上节点间的最大距离

本文介绍了如何求解二叉树中任意两个节点的最大距离。通过分析节点可能位于同一侧子树或不同侧子树的情况,利用递归在后序遍历过程中找到最大距离。具体思路包括在左子树、右子树和跨子树时分别计算最大距离,并结合实际案例解释了算法的工作原理。
摘要由CSDN通过智能技术生成

题目

从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500.

思路

中节点4和节点2之间的距离为2,节点2和5之间的距离为3.

设二叉树的头节点为head,这棵树的节点间最大距离可从以下三种情况中得来,设有最大距离的节点为A和B:

1、A和B都在head的左子树上,即这棵树的节点间最大距离就是以head->left为根节点的二叉树的节点间最大距离,设为Lmax1;

2、A和B都在head的右子树上,这时,这棵树的节点间最大距离就是以head->right为根节点的二叉树的节点间最大距离,设为Rmax1;

3、A在左子树上,B在右子树上,设A距离head->left的距离为Lmax2,B距离head->right的距离为Rmax2,A和B之间的距离为Lmax2+Rmax2+1

最后取Lmax1、Rmax1和(Lmax2+Rmax2+1)的最大值即为返回结果。

因为涉及到重复的运算,这道题用递归来做。

代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值