從二叉樹的節點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);
}
}