二叉树中节点的最大的距离(编程之美3.8)
问题来源:《编程之美》3.8 求二叉树节点的最大距离
如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数。
写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
如下图所示,粗箭头的边表示最长距离:
树中相距最远的两个节点是A, B
1 #include<iostream> 2 using namespace std; 3 typedef struct BiTNode 4 { 5 BiTNode *left; 6 BiTNode *right; 7 }BiTNode, *BiTree; 8 9 int maxDis = 0; 10 11 void createTree(BiTree &root) 12 { 13 BiTree left1 = new(BiTNode); 14 BiTree right1 = new(BiTNode); 15 16 left1->left = NULL; 17 left1->right = NULL; 18 right1->left = NULL; 19 right1->right = NULL; 20 21 root->left = left1; 22 root->right = right1; 23 24 25 BiTree left2 = new(BiTNode); 26 left2->left = NULL; 27 left2->right = NULL; 28 BiTree right2 = new(BiTNode); 29 right2->left = NULL; 30 right2->right = NULL; 31 left1->left = left2; 32 left1->right = right2; 33 34 BiTree left3 = new(BiTNode); 35 left3->left = NULL; 36 left3->right = NULL; 37 BiTree right3 = new(BiTNode); 38 right3->left = NULL; 39 right3->right = NULL; 40 left2->left = left3; 41 left2->right = right3; 42 } 43 44 void deleteTree(BiTree root) 45 { 46 if(root) 47 { 48 deleteTree(root->left); 49 deleteTree(root->right); 50 delete(root); 51 root = NULL; 52 } 53 } 54 55 int height(BiTree root) 56 { 57 if(root == NULL) 58 return 0; 59 else 60 return height(root->left) > height(root->right) ? height(root->left) + 1 : height(root->right) + 1; 61 } 62 63 int max(int a, int b, int c) 64 { 65 int tmp = a > b ? a : b; 66 return tmp > c ? tmp : c; 67 } 68 69 int treeDistance(BiTree root) 70 { 71 if(root == NULL) 72 return 0; 73 else if(root->left == NULL && root->right == NULL) 74 return 0; 75 int dis = max(height(root->left) + height(root->right), treeDistance(root->left), treeDistance(root->right)); 76 if(maxDis < dis) 77 maxDis = dis; 78 return dis; 79 } 80 81 int main() 82 { 83 BiTree root = new(BiTNode); 84 root->right = root->left = NULL; 85 createTree(root); 86 cout << "height:" << height(root) << endl; 87 cout << "treeDistance:" << treeDistance(root) << endl; 88 cout << "_____________________" << endl; 89 deleteTree(root); 90 }
View Code
转载于:https://www.cnblogs.com/guxuanqing/p/5957932.html
二叉树中节点的最大的距离(编程之美3.8)相关推荐
- 2017“编程之美”终章:AI之战勇者为王
编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...
- 【编程题目】求二叉树中节点的最大距离
第 11 题(树) 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数. 写一个程序, 求一棵二 ...
- c++实现二叉树中节点的最大距离 - c++语言程序开发技术文章,c++实现二叉树中节点的最大距离...
文章前半部分能懂,可是后面的Milo不是很理解,可能有待以后学习..... 微软面试题之一,难度系数中,题目描述如下: 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看 ...
- 编程之美2.10:寻找数组中的最大值和最小值
编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...
- 编程之美2.1 求二进制中1的个数
最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...
- Java 并发编程之美:并发编程高级篇之一-chat
借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...
- Java 并发编程之美:并发编程高级篇之一
借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...
- 变形二叉树中节点的最大距离(树的最长路径)——非递归解法
问题描写叙述: 假设我们把二叉树看成一个图,父子节点之间的连线看成是双向的.我们姑且定义"距离"为两节点之间边的个数. 写一个程序,求一棵二叉树中相距最远的两个节点之间的距离.測试 ...
- 【100题】第十一题(二叉树中节点的最大距离)
一,题目: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的(无向图),定义"距离"为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离 ...
最新文章
- 微信小程序想要最短服务路径
- mac 下启动Android Studio 时出现 Android Studio was unable to find a valid Jvm
- 使用注解实现ssh整合
- ora29280 oracle,细节:utl_file_dir错误设置导致ORA-29280
- 验证码(captcha)的由来
- chrome浏览器的跨域设置,前端修改跨域问题
- linux控制流程,Linux - Bash - 流程控制
- 你这样的“垃圾“,就应该进入老年代!!!
- 信息学奥赛一本通C++语言——1032:大象喝水
- 评估系统C语言答案,用C语言评估语句
- 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象
- 猫癣病毒躲猫猫移师广东东莞月入百万作者
- MQTT从入门到放弃
- 薄板开孔建模计算的ansys命令流
- java 极光推送_极光推送java实现
- 微信新动作!加好友解除5000上限,扫码进群开放至200人
- 2019-11-29-Mastering_bitcoin
- 如何判断两条直线是否相交
- 瑞盟485/422接口电路MS2576完全替代AM26C31
- 修改host文件实现内网传输