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

思路:  一棵树中节点的最大距离,对于根节点来说,可以看做是左子树的最大深度加右子树的最大深度在加上左右各一个深度 (leftDepth + rightDepth + 1 + 1),但有种情况是假如根节点的左子节点,该节点分别有很深的左子树和右子树,则整棵树具有最大间距的节点,可能都分布在该左子树上,压根不会经过根节点。所以考虑到这种情况,在进行递归计算时,需要比较根据深度得到的最大距离和实际左右节点最大距离,找出较大的那个

 1 package com.rui.microsoft;
 2
 3 public class Test11_MaxDistanceBST {
 4
 5     public static void main(String[] args) {
 6         Node n1 = new Node(1);
 7         Node n2 = new Node(2);
 8         Node n3 = new Node(3);
 9         Node n4 = new Node(4);
10         Node n5 = new Node(5);
11         Node n6 = new Node(6);
12         Node n7 = new Node(7);
13         Node n8 = new Node(8);
14         Node n9 = new Node(9);
15
16         n1.left = n2; n1.right = n3;
17         n2.left = n4; n2.right = n5;
18         n4.left = n6;
19         n5.right = n7;
20         n6.left = n8;
21         n7.right = n9;
22
23         int maxDistance = Test11_MaxDistanceBST.calulate(n1).dist;
24         System.out.println(maxDistance);
25     }
26
27     public static Result calulate(Node node){
28         //if current node doesn't exist
29         //then return 0 distance and -1 depth
30         if(null == node) return new Result(0, -1);
31
32         Result leftRes = calulate(node.left);
33         Result rightRes = calulate(node.right);
34
35         //First let's assume the max distance is the left node's depth + right node's depth + left single depth + right single depth
36         int maxDis = leftRes.depth + rightRes.depth + 1 + 1;
37         //Then compare it with real distance value and get the largest one
38         maxDis = max(maxDis, max(leftRes.dist, rightRes.dist));
39
40         //return the result object, whose depth value should be choosen by comparing left node's depth and right node's depth and plus one single depth value
41         return new Result(maxDis, max(leftRes.depth, rightRes.depth) + 1);
42
43     }
44
45     private static int max(int i, int j){
46         return i > j ? i:j;
47     }
48
49     static class Result{
50         int dist;
51         int depth;
52         Result(int dist, int depth){
53             this.dist = dist;
54             this.depth = depth;
55         }
56     }
57
58     static class Node {
59         int value;
60         Node left;
61         Node right;
62         public Node(int v){
63             this.value = v;
64         }
65     }
66 }

转载于:https://www.cnblogs.com/aalex/p/4904569.html

微软算法100题11 求二叉树中两节点之间的最大距离相关推荐

  1. 二叉树中两节点之间最短路径

    折腾了一下午,在参考 liuyi1207164339帖子和 ethannnli的帖子的基础上搞定了这个问题.刚开始头真的大了,感觉有点超出能力范围了.分析了他们的思路,求解这个二叉树中两节点的最短路径 ...

  2. 二叉树任意两节点之间的最短距离

    public class 二叉树任意两节点之间的路径 {public static void main(String[] args) {TreeNode node = new TreeNode(1); ...

  3. 求二叉树中两个节点最远的距离

    一说到二叉树,就有很多题目,今天在编程之美中看到了二叉树中两个节点最远的距离.所以给想借机写一篇博客. 在开始之前,我们先想想,两个最常节点的最远距离是怎么样的? 情况一:最大距离可能一个在左子树,一 ...

  4. 剑指offer之求二叉树中两个节点的最低共同父节点

    1 问题 求二叉树中俩个节点的最低共同父节点,比如二叉树如下 42 61 3 5 7 比如节点1和3两个节点的最低共同父节点是2,节点3和5两个节点的最低共同父节点是4,节点5和6两个节点的最低共同父 ...

  5. 求二叉树中两个节点的最远距离

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

  6. 二叉树两节点距离java,求二叉树中两个节点的最远距离

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

  7. 微软算法100题58 从尾到头输出链表(java)

    题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值 以前做过相似的,可以用递归解决,也可以用非递归解决 1 package com.rui.microsoft; 2 3 import java ...

  8. 微软算法100题26 左旋转字符串

    26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef 左旋转2 位得到字符串cdefab.请实现字符串左旋转的函数. 要求时间对长度 ...

  9. java数组排列组合_java算法题--递归求数组中数字排列组合问题

    java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...

最新文章

  1. apache +mod_jk URL中文乱码
  2. Xcode 报错Could not find developer disk image,iOS10
  3. GDT,LDT,GDTR,LDTR 详解,包你理解透彻
  4. 使用maven导入任意jar包
  5. ubuntu gedit出错:Failed to connect to the session manager
  6. LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)
  7. 统计字符[2] (15 分)
  8. lesson1 ODE的几何解法:方向场,积分曲线
  9. 企业网站建设注意事项
  10. pulseaudio数据流框图
  11. Linux 安装flash
  12. MySQL 8.0.29安装版安装教程
  13. TypeError: format expected at most 2 arguments, got 7
  14. by mysql 按每分钟group_MySQL group by 统计每5分钟数据量
  15. 使用Docker-Slim对Docker镜像进行瘦身打包
  16. ALM/QC11.0在win8/IE11下无法浏览
  17. JAVA解析Excel工具EasyExcel(alibaba)
  18. 三种数据交换方式的时延计算
  19. 关于鸿蒙,你怎么看,三面美团Android岗
  20. 进制操作,数据底层计算机基础

热门文章

  1. 对于学习方式的一些思考
  2. 软件测试质量过程检测文档_如何编写实际上有效的质量检查文档
  3. 1021 Deepest Root
  4. 软件缺陷生命周期图示及当中涉及到的缺陷的状态
  5. 域名登陆出现400_域名解析错误怎么办?
  6. C#Hello World
  7. 直接依赖,间接依赖,可选依赖,排除依赖,依赖冲突
  8. [异常笔记] spring boot 启动-2018040201
  9. (Mirage系列之六)在Mirage里使用Collection
  10. python 定时任务