求二叉树中节点的最大距离
2015-10-08 13:57
225 查看
如果我们把二叉树视为一个图,父子几点之间的连线视为是双向的,我们可以把“距离”定义为来两结点之间边的个数。
计算一个二叉树的最大距离有两种情况:
情况A:路径经过左子树,通过根节点,再到右子树饿最深节点。
情况B:路径不经过根节点,而是左子树或者右子树的最大距离路径,取其大者。
只需要计算这两个情况的路径距离,并取其大者,就是该二叉树的最大距离。
代码如下:
为了减少NULL的条件测试,进入函数时,如果结点为NULL,会传回empty变量。其中将empty.nMaxDepth初始化为-1,目的是让调用方+1后,把无子树结点的最大深度置为0。
计算一个二叉树的最大距离有两种情况:
情况A:路径经过左子树,通过根节点,再到右子树饿最深节点。
情况B:路径不经过根节点,而是左子树或者右子树的最大距离路径,取其大者。
只需要计算这两个情况的路径距离,并取其大者,就是该二叉树的最大距离。
代码如下:
typedef struct BTNode { int data; BTNode * lc; BTNode * rc; }BTNode,*BinTree; typedef struct RESULT { int nMaxDistance; int nMaxDepth; }RESULT; //算法函数 RESULT getMaxDistance(NODE *node) { if(!node)//递归到最大深度才进行初始化 { RESULT empty = {0,-1}; return empty; } //对左右子树进行递归遍历 RESULT lhs=getMaxDistance(node->lc); RESULT lhs=getMaxDistance(node->rc); RESULT result; result.nMaxDepth = max(lhs.nMaxDepth+1,rhs.nMaxDepth+1);//加1,因为连接到根节点 result.nMaxDistance=max(max(lhs.nMaxDistance,rhs.nMaxDistance),lhs.nMaxDepth+1+rhs.nMaxDepth+1); return result; }
为了减少NULL的条件测试,进入函数时,如果结点为NULL,会传回empty变量。其中将empty.nMaxDepth初始化为-1,目的是让调用方+1后,把无子树结点的最大深度置为0。
相关文章推荐
- 07-Dom节点常用方法介绍
- 【LeetCode】Lowest Common Ancestor of a Binary Search Tree
- strdup
- tableView局刷新
- Memcached深度分析
- 全景:迭代最近点ICP算法入门(点匹配)
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
- 程序员鼓励师到底是啥?
- ServerU FTP 9.1.0.5完美破解版 使用教程 学校局域网上课上传下载文件用--图片来自网络
- 跨站点请求伪造
- 【扣丁学堂】谁说企业没人要老程序员
- ZOJ-3633-Alice's present
- js控制5秒后页面自动跳转
- angular.js基础—服务(service)及其调用
- 论c程序员转java学习
- 简单理解js面向对象工厂方式
- 转 GRE -- ME 似乎有件事,一直等待着我去做,努力去做。
- 手机号码归属地接口开发文档及调用实例
- 如何导入support_V4包中源码
- iOS退出键盘方法