分析详见《编程之美》

code

#include <stdio.h>
#include <stdlib.h>#define A 17
int s[A]={10,6,4,-1,-1,8,-1,-1,14,12,-1,18,-1,-1,16,-1,-1};
int index=0;
int maxlen=0;typedef struct TREE_NODE
{int data;struct TREE_NODE* ltree;struct TREE_NODE* rtree;int lmaxlen;int rmaxlen;
}NODE;NODE* newnode()
{NODE* temp;temp=(NODE*)malloc(sizeof(NODE));return temp;
}void constructtree(NODE* &pnode)
{if(s[index]!=-1){pnode=newnode();pnode->data=s[index++];constructtree(pnode->ltree);constructtree(pnode->rtree);}else{pnode=NULL;index++;}
}
/**基本思想:先序递归,递归到叶子节点后回溯计算
*/
void searchmaxlen(NODE* pnode)
{if(pnode->ltree==NULL){pnode->lmaxlen=0;}if(pnode->rmaxlen==NULL){pnode->rmaxlen=0;}if(pnode->ltree!=NULL){searchmaxlen(pnode->ltree);}if(pnode->rtree!=NULL){searchmaxlen(pnode->rtree);}int temp;if(pnode->ltree!=NULL){if(pnode->ltree->lmaxlen>pnode->ltree->rmaxlen){temp=pnode->ltree->lmaxlen;}else{temp=pnode->ltree->rmaxlen;}pnode->lmaxlen=temp+1;}if(pnode->rtree!=NULL){if(pnode->rtree->lmaxlen>pnode->rtree->rmaxlen){temp=pnode->rtree->lmaxlen;}else{temp=pnode->rtree->rmaxlen;}pnode->rmaxlen=temp+1;}if(pnode->lmaxlen+pnode->rmaxlen>maxlen){maxlen=pnode->lmaxlen+pnode->rmaxlen;}
}int main(void)
{NODE* root;constructtree(root);searchmaxlen(root);printf("The max distance of the tree is %d.\n",maxlen);system("pause");return 0;
}

《编程之美》---求二叉树中节点的最大距离相关推荐

  1. 编程之美-求二叉树中节点的最大距离方法整理

    [试题描述] 方法:

  2. 【编程题目】求二叉树中节点的最大距离

    第 11 题(树) 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数. 写一个程序, 求一棵二 ...

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

    struct node{ Node Left; Node Right; int MaxLeft;//左子树到该节点的最长距离 int MaxRight;//右子树到该节点的最长距离 char chVa ...

  4. c++实现二叉树中节点的最大距离 - c++语言程序开发技术文章,c++实现二叉树中节点的最大距离...

    文章前半部分能懂,可是后面的Milo不是很理解,可能有待以后学习..... 微软面试题之一,难度系数中,题目描述如下: 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看 ...

  5. 编程之美 求数组中的最长递增子序列

    如题,例如:存在数组 1,-1,2,-3,4,-5,6,-7 ,则最长的递增子序列是:1,2,4,6. 法一: 蛮力法 int Lis(int* arr,int n) {int iCount=0;// ...

  6. 变形二叉树中节点的最大距离(树的最长路径)——非递归解法

    问题描写叙述: 假设我们把二叉树看成一个图,父子节点之间的连线看成是双向的.我们姑且定义"距离"为两节点之间边的个数. 写一个程序,求一棵二叉树中相距最远的两个节点之间的距离.測试 ...

  7. 【100题】第十一题(二叉树中节点的最大距离)

    一,题目:        如果把二叉树看成一个图,父子节点之间的连线看成是双向的(无向图),定义"距离"为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离 ...

  8. 编程之美求二进制数中1的个数扩展题

    转自:http://s.sousb.com/?p=253 编程之美2.1节中的扩展题第1题:如果变量是32位的Dword,则如何统计该二进制数中1的个数. 对于该题,原本的想法还是想采用书中解法三,也 ...

  9. 编程之美-求数组中最长递增子序列(LIS)方法整理

    [试题描述] 方法一:时间复杂度O(n^2) 方法二:时间复杂度O(n^2) 方法三: 修改方法二中的穷举搜索部分为如下: 如果把上述查询部分利用二分搜索进行加速,可以得到时间复杂度为O(nlogn) ...

  10. 编程之美-求二进制数中1的个数方法整理

    [试题描述] 方法一:穷举法(暴力搜索) 方法二:使用位操作 方法三: 方法四:使用分支操作 方法五:查表法,时间复杂度O(1),以空间换时间

最新文章

  1. EAP-MD5认证暴力破解工具eapmd5pass
  2. 前端画面-下拉后滚动
  3. 全能HOOK框架 JNI NATIVE JAVA ART DALVIK
  4. C语言实现折半插入排序(Binary Insertion Sort)算法(附完整源码)
  5. 框架学习之Hibernate 第十节 事务原理与分析
  6. WPF 实现任务栏角徽
  7. python编译2的n次方计算器_用PYTHON2做个计算器,哪位高手能用Python写出计算器的代码,需要加减乘除和退出,谢谢!...
  8. python输入的数字为什么不能计算_计算器为什么只能进行个位数的计算,每次只能输入一个数字,求...
  9. Servlet Request
  10. hadoop2.6分布式环境搭建
  11. C#知识点总结系列:2、C#中IDisposable和IEnumerable、IEnumerator
  12. 在浏览器中将表格导入到本地的EXCEL文件,注意控制内存
  13. paip.sql2008 客户端软件绿色版V319
  14. Python POST登陆linkedin分析(完),完整实现过程
  15. git视频及对初学者的学习建议
  16. matlab积分求解(定积分/不定积分)总结
  17. 全国大学生数学竞赛备考——高数上(极限、导数、微分、积分、级数)
  18. python爬表情包_教你用Python来爬取表情包网站的所有表情图片
  19. uniapp 微信小程序 控制台警告和错误处理
  20. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试(二)涉及工具

热门文章

  1. Kepware OPC与服务器通讯
  2. 谈谈图书馆座位管理系统今日崩溃
  3. 基于Java毕业设计医院药品管理系统源码+系统+mysql+lw文档+部署软件
  4. 计算机维修费税收分类,维修费税收分类编码是多少?
  5. Cesium加载GeoJson数据
  6. yosemite php gd,Yosemite/El Capitan php-gd mcrypt安装
  7. jsp项目实战--项目介绍
  8. SPSS24.0输了授权码还不能用怎么破?
  9. Markdown笔记简明教程
  10. ibm服务器aix系统查看cpu,IBM AIX系统硬件信息查看命令(shell脚本)