337. 打家劫舍 III*【力扣】

题意理解

在一个二叉树上遍历,不相邻元素之间的和的最大值

问题分析

递归

分解为带根,不带根两种情况。

其他

链接

    int rob(TreeNode* root) {
        int withRoot = 0, withoutRoot = 0;
        helper (root, withRoot, withoutRoot);
        return max (withRoot, withoutRoot);
    }
    void helper (TreeNode* root, int& withRoot, int& withoutRoot)
    {
        if (!root)
            return;
        int withRootl = 0, withRootr = 0, withoutRootl = 0, withoutRootr = 0;
        helper (root -> left, withRootl, withoutRootl);
        helper (root -> right, withRootr, withoutRootr);
        withRoot = withoutRootl + withoutRootr + root -> val;//带根的最大值等于根值+不带根左子树值+不带根右子树值
        withoutRoot = max (withRootl, withoutRootl) + max (withRootr, withoutRootr);//不带根最大值等于左子树不带根,带根的最大值 + 右子树不带根,带根的最大值??
        
    }

 

你可能感兴趣的:(算法,工作刷题)