标签的二叉树最大差异

时间:2018-09-07 10:19:19

标签: php binary-tree

我有以下问题,但是我很难理解它并在PHP中实现。

您有一棵具有 N个节点(1 <= N <= 100000)的二叉树,编号从 0 N-1 一个标有一些整数的数字。 您必须回答 Q(1 <= Q <= 75000)个查询,每个查询都由某个节点(介于0到N – 1之间的某个整数)表示。

每个查询的答案是在从给定节点到树的根的路径中找到的标签之间最大的差异,树的根始终为节点0。在输入的第一行中将给出N。在第i 行之后的N行描述了树的第i 节点的数据(第一行描述了节点0,依此类推),带有3个整数:标签,左孩子,右孩子。没有任何孩子将以-1表示。然后是整数为Q的行,然后是Q行,每行如上所述都进行一个查询。

案例1:

  

对于提供的输入如下:

     

3

     

10 1 2

     

12 -1 -1

     

15 -1 -1

     

2

     

1

     

2

     

程序的输出将是:

     

2

     

5

案例2:

  

对于提供的输入如下:

     

3

     

10 1 -1

     

15 2 -1

     

20 -1 -1

     

2

     

1

     

2

     

程序的输出将是:

     

5

     

10

获得最大差异,例如案例2

我想说查询二的输出是5,因为从我的二叉树数据来看,我的二叉树有10(根),然后是根左边的节点15,然后是15左边的节点20,所以20-15与15-10相同,这使它们都成为5。我在这里还是什么都不懂...欢迎任何见识。

1 个答案:

答案 0 :(得分:0)

考虑 root 给定节点

之间的所有节点
  

对于提供的输入如下:

     

3

     

10 1 -1

     

15 2 -1

     

20 -1 -1

     

1

     

2

     

程序的输出将是:

     

10

您获得了10-15-20路径,应该使用

max(10,15,20) - min(10,15,20) => 10
  

对于提供的输入如下:

     

7

     

33 1 5

     

11 2 -1

     

27 3 6

     

87 4 -1

     

3 -1 -1

     

666 -1 -1

     

6666 -1 -1

     

1

     

4

     

程序的输出将是:

     

84

获得更长的链33-11-27-87-3得到

max(33,11,27,87,3) - min(33,11,27,87,3) => 87-3 => 84