【LeetCode】 543. 二叉樹的直徑 2020年3月10日

題目

題目傳送門:傳送門(點擊此處)
在這裏插入圖片描述

題解

思路

從題目很容易想到,這道題要使用遞歸來做,每個節點要存儲兩個值,分別是 左子樹得深度右子樹得深度,然後求得每個節點得直徑即可

因爲要遍歷一遍節點,所以時間複雜度肯定是 O(n) ,空間複雜度是 樹的高度 ,因爲用棧來做遞歸用,所以應該是 O(Height) ,最差是 O(n)

至於難點就是,都要訪問一個公共變量,所以這個變量抽離出來存儲最大得直徑

code

class Solution {
    int ans;
    public int diameterOfBinaryTree(TreeNode root) {
        ans = 1;
        depth(root);
        return ans - 1;
    }
    public int depth(TreeNode node) {
        if (node == null) return 0; // 訪問到空節點了,返回0
        int L = depth(node.left); // 左兒子爲根的子樹的深度
        int R = depth(node.right); // 右兒子爲根的子樹的深度
        ans = Math.max(ans, L+R+1); // 計算d_node即L+R+1 並更新ans
        return Math.max(L, R) + 1; // 返回該節點爲根的子樹的深度
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章