从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。
给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500.
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public classLongestDistance {
public int findLongest(TreeNode root) {
// write code here
int[] record = new int[1]; // 作为全局变量保存返回的值
return search(root, record);
}
public int search(TreeNode head, int[]record){
if(head == null) {
record[0] = 0;
return 0;
}
// lmax 是head的左子树中的最远距离, record[0]更新为距离head最远的距离【这两个是完全不一样的概念】
int lmax = search(head.left, record);//记录左子树最大
int leftNodeMax = record[0];//记录左子树上离h.left最远距离
int rmax = search(head.right, record);//记录右子树最大
int rightNodeMax = record[0];记录右子树上离h.right最远距离
int curMax = leftNodeMax + 1 +rightNodeMax;// Math.max()
record[0] = Math.max(leftNodeMax,rightNodeMax) + 1;//寻找到该节点最远加1
return Math.max(Math.max(lmax, rmax),curMax);
}
}