题意理解
在一个二叉树上遍历,不相邻元素之间的和的最大值
问题分析
递归
分解为带根,不带根两种情况。
其他
链接
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);//不带根最大值等于左子树不带根,带根的最大值 + 右子树不带根,带根的最大值??
}