最开始理解题目错了,下意识认为是求奇偶层之间的最大值,写出来通过了一半样例,才反映过来不连续层不代表就是隔一层。。
重新思考思路,采用递归思想,对每一节点r来说,其最大值要么是r和r的孙子们的值, 要么是r的儿子们的值,深度搜索解决
class Solution
{public:int rob(TreeNode *root){int left = 0, right = 0;return dfs(root, left, right);}int dfs(TreeNode *node, int &left, int &right){if (node == nullptr)return 0;int ll = 0, lr = 0, rl = 0, rr = 0;left = dfs(node->left, ll, lr);right = dfs(node->right, rl, rr);return max(node->val + ll + lr + rr + rl, left + right);}
};
DP求解以及思路,分析的非常好,值得一看