İkili Ağac Maksimum Yol Cəmi LeetCode Həlli

Çətinlik səviyyəsi Ağır
Tez-tez soruşulur Çiy kərpic Amazon alma Bloomberg ByteDance Didi Qapılar Facebook Flipkart google LinkedIn microsoft Mintra Kahin Paytm Samsung Snapchat Sprinklr cuqquldamaq Über VMware Arzu Yahoo Yandex
Mağaza tiktok TuSimple Walmart Qlobal texnologiyaBaxılıb 23

Problem bəyanat

İkili Ağac Maksimum Yol Cəmi LeetCode Həlli – A yol bir ikili ağac ardıcıllıqdakı hər bir bitişik qovşaq cütünün onları birləşdirən kənarı olduğu qovşaqların ardıcıllığıdır. Bir node yalnız ardıcıllıqla görünə bilər ən çox bir dəfə. Qeyd edək ki, yolun kökdən keçməsi lazım deyil.

The yol cəmi yolun yoldakı qovşağının dəyərlərinin cəmidir.

Verilmişdir root ikili ağacın qaytarılması bu maksimum yol cəmi hər hansı birindən boş deyil yol.

misal

Test işi 1:

Input:

kök = [-10, 9, 20, null, null, 15, 7]

İkili Ağac Maksimum Yol Cəmi LeetCode HəlliPin

Çıxış:

42

Izahat

Optimal yol 15 + 20 + 7 = 15 yol cəmi ilə 20 -> 7 -> 42-dir.

İkili Ağac Maksimum Yol Cəmi LeetCode HəlliPin

Yanaşma:

Bu problemin arxasında duran fikir aşağıdakılardır:

  • Ağacın hər qovşağı üçün maks. arasından tapın: leftSum, rightSum, root.val, leftSum + root.val , rightSum + root.val, leftSum + rightSum + root.val
  • Maksumu qlobal maksimuma qədər qeyd edin
  • İndi siz qlobal maksimumu qaytara bilməzsiniz. Siz leftSum + root.val, rightSum + root.val və ya root.val maksimumunu qaytarmalısınız. Bu, bitişik bir sıra qovşaqlara baxmağınızı təmin edir.

Fikir də belədir DFS. Aşağıdan yuxarı, hər qovşaqda dörd seçimimiz var:

  1. sol alt yol ==> node ==> sağ alt yol.
  2. sol alt yol ==> node ==> yuxarı. Sol alt yol mənfi cəmi verə bilər, bu halda biz node->left sub-yolu sıfıra təyin edirik.
  3. sağ alt yol ==> node ==>yuxarı. Doğru alt yol mənfi cəmi verə bilər, bu halda biz node->sağ alt yolu sıfıra təyin edirik.
  4. 0 ==> yuxarı, bu o deməkdir ki, mənfi cəminə görə bu qovşaqda köklənmiş bütün ağacı tərk edirik.

Qeyd: Mənfi node dəyərləri mümkündür.

İkili Ağacın Maksimum Yol Cəmi üçün Kod

C ++ Proqramı

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    int maxPathSum(TreeNode *root, int &ma)
    {
        if (!root)
            return 0;
        int left =  maxPathSum(root->left, ma);
        int right = maxPathSum(root->right, ma);
        ma = max(ma, root->val + left + right);
        return max(max(0, max(left, right)) + root->val, 0);
    }

public:
    int maxPathSum(TreeNode* root)
    {
        if (!root)
            return INT_MIN;  //This INT_MIN is just to comply with the judge.
        
        int ma = root->val;
        
        maxPathSum(root, ma);
        
        return ma;
    }
};

Java Proqramı

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int maxSum = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        dfs(root);
        return maxSum;
    }
    
    public int dfs(TreeNode node) {
        if (node == null) return 0;
        
        int left = Math.max(dfs(node.left), 0);
        int right = Math.max(dfs(node.right), 0);
        
        maxSum = Math.max(maxSum, node.val + left + right);
        return node.val + Math.max(left, right);
    }
}

İkili Ağac Maksimum Yol Cəmi LeetCode Həlli üçün Mürəkkəblik Təhlili

Zamanın mürəkkəbliyi: O (N)

Kosmik Mürəkkəblik: O (H)

Translate »