美文网首页
leetcode LCP 34. 二叉树染色 golang

leetcode LCP 34. 二叉树染色 golang

作者: lucasgao | 来源:发表于2021-04-10 22:33 被阅读0次

    LCP 34. 二叉树染色

    这道题理解错题意了 改了n久 自己好菜

    题目

    小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值。小扣出于美观考虑,希望最后二叉树上每个蓝色相连部分的结点个数不能超过 k 个,求所有染成蓝色的结点价值总和最大是多少?

    解题思路

    dp[k] 表示在当前节点染色了k的最大值。
    dp[0] = max(left,right),dp[k]=max(dp_left[n],dp_right[k-n-1]) + root.val

    代码

    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    
    func maxValue(root *TreeNode, k int) int {
        A := dfs(root, k)
        ans := 0
        for _, item := range A {
            if ans < item {
                ans = item
            }
        }
        return ans
    }
    
    func dfs(root *TreeNode, k int) []int {
        A := make([]int, k+1)
        if root == nil {
            return A
        }
        left := dfs(root.Left, k)
        right := dfs(root.Right, k)
        t := 0
        for _, item := range left {
            if t < item {
                t = item
            }
        }
        A[0] += t
        t = 0
        for _, item := range right {
            if t < item {
                t = item
            }
        }
        A[0] += t
        A[1] = left[0] + right[0] + root.Val
        for n := 2; n <= k; n++ {
            for i := 0; i < n; i++ {
                j := n - i - 1
    
                if A[n] < left[i]+right[j]+root.Val {
                    A[n] = left[i] + right[j] + root.Val
                }
            }
        }
        // A[1] = left[0] + right[0] + root.Val
        // for i := 1; i <= k; i++ {
        //  A[i] = left[i-1] + right[i-1]
        //  if left[i-1]!=0 && A[i] < left[i-1]+right[0] {
        //      A[i] = left[i-1] + right[0]
        //  }
        //  if right[i-1] != 0 && A[i] < right[i-1]+left[0] {
        //      A[i] = right[i-1] + left[0]
        //  }
        // if i == 1 || A[i]!=0{
        //      A[i] += root.Val
        // }
        // }
        return A
    }
    

    相关文章

      网友评论

          本文标题:leetcode LCP 34. 二叉树染色 golang

          本文链接:https://www.haomeiwen.com/subject/pblokltx.html