首页 > 其他 > 详细

求二叉树中节点的最大距离

时间:2015-10-08 14:38:19      阅读:289      评论:0      收藏:0      [点我收藏+]

如果我们把二叉树视为一个图,父子几点之间的连线视为是双向的,我们可以把“距离”定义为来两结点之间边的个数。

计算一个二叉树的最大距离有两种情况:
情况A:路径经过左子树,通过根节点,再到右子树饿最深节点。
情况B:路径不经过根节点,而是左子树或者右子树的最大距离路径,取其大者。
只需要计算这两个情况的路径距离,并取其大者,就是该二叉树的最大距离。

代码如下:

 1 typedef struct BTNode
 2 {
 3     int data;
 4     BTNode * lc;
 5     BTNode * rc;
 6 }BTNode,*BinTree;
 7 
 8 typedef struct RESULT
 9 {
10     int nMaxDistance;
11     int nMaxDepth;
12 }RESULT;
13 
14 //算法函数
15 RESULT getMaxDistance(NODE *node)
16 {
17     if(!node)//递归到最大深度才进行初始化
18     {
19         RESULT empty = {0,-1};
20         return empty;
21     }
22     //对左右子树进行递归遍历
23     RESULT lhs=getMaxDistance(node->lc);
24     RESULT lhs=getMaxDistance(node->rc);
25     RESULT result;
26     result.nMaxDepth = max(lhs.nMaxDepth+1,rhs.nMaxDepth+1);//加1,因为连接到根节点
27     result.nMaxDistance=max(max(lhs.nMaxDistance,rhs.nMaxDistance),lhs.nMaxDepth+1+rhs.nMaxDepth+1);
28     return result;
29 }

为了减少NULL的条件测试,进入函数时,如果结点为NULL,会传回empty变量。其中将empty.nMaxDepth初始化为-1,目的是让调用方+1后,把无子树结点的最大深度置为0。

求二叉树中节点的最大距离

原文:http://www.cnblogs.com/houjun/p/4860832.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!