整棵樹上節點間的最大距離

從二叉樹的節點A出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點B時,路徑上的節點數叫作AB的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。

給定一個二叉樹的頭結點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);

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章