问题来源:《编程之美》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)相关推荐

  1. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

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

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

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

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

  4. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  5. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  6. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  7. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

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

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

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

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

最新文章

  1. 微信小程序想要最短服务路径
  2. mac 下启动Android Studio 时出现 Android Studio was unable to find a valid Jvm
  3. 使用注解实现ssh整合
  4. ora29280 oracle,细节:utl_file_dir错误设置导致ORA-29280
  5. 验证码(captcha)的由来
  6. chrome浏览器的跨域设置,前端修改跨域问题
  7. linux控制流程,Linux - Bash - 流程控制
  8. 你这样的“垃圾“,就应该进入老年代!!!
  9. 信息学奥赛一本通C++语言——1032:大象喝水
  10. 评估系统C语言答案,用C语言评估语句
  11. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象
  12. 猫癣病毒躲猫猫移师广东东莞月入百万作者
  13. MQTT从入门到放弃
  14. 薄板开孔建模计算的ansys命令流
  15. java 极光推送_极光推送java实现
  16. 微信新动作!加好友解除5000上限,扫码进群开放至200人
  17. 2019-11-29-Mastering_bitcoin
  18. 如何判断两条直线是否相交
  19. 瑞盟485/422接口电路MS2576完全替代AM26C31
  20. 修改host文件实现内网传输

热门文章

  1. AcWing 894. 拆分-Nim游戏
  2. 2020 年百度之星程序设计大赛 - 初赛二
  3. AtCoder Beginner Contest 171 B - Mix Juice
  4. Tomcat和eclipse的整合
  5. [linux]远程kill进程
  6. web前端知识天天学(3)
  7. Spring 静态代理和动态代理
  8. cisco 交换机设置时区、时间、同步日志本地时间等操作
  9. 系统批量运维管理器Fabric详解
  10. 如何用PHP实现Socket服务器