二叉树节点间的最大距离问题
从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路
径上的节点数叫作 A 到 B 的距离。求整棵树上节点间的最大距离。
从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路
径上的节点数叫作 A 到 B 的距离。求整棵树上节点间的最大距离。
如果二叉树的节点数为 N,时间复杂度要求为 O(N)。
public static class Node{
public int value;
public Node left;
public Node right;
public Node(int data){
this.value = data;
}
}
public static int maxDistance(Node head){
int[] record = new int[1];
return posOrder(head, record);
}
public static int posOrder(Node head, int[] record){
if(head == null){
record[0] = 0;
return 0;
}
int lMax = posOrder(head.left, record);
int maxfromLeft = record[0];
int rMax = posOrder(head.right, record);
int maxFromRight = record[0];
int curNodeMax = maxfromLeft + maxFromRight + 1;
record[0] = Math.max(maxfromLeft, maxFromRight) + 1;
return Math.max(Math.max(lMax,rMax), curNodeMax);
}