인접하지 않은 최대 트리 합계
설명
이진 트리root
가 주어지면 두 개의 정수가 상위에서 하위로 인접할 수 없는 경우 얻을 수 있는 정수의 최대 합계를 반환합니다.
제약:
n ≤ 100,000
여기서 n
는 root
의 노드 수입니다.예시 1
입력
root = [1, [4, [3, null, null], [2, null, null]], [5, null, null]]
산출
10
설명
We can pick 3, 2 and 5. Note if we picked 4, we wouldn't be able to pick 3 and 2 since they are adjacent.
직관
dfs + dp
구현
/**
* class Tree {
* public:
* int val;
* Tree *left;
* Tree *right;
* };
*/
pair<int, int> dfs(Tree* node) {
if (!node) return make_pair(0, 0);
auto [leftWith, leftWithout] = dfs(node->left);
auto [rightWith, rightWithout] = dfs(node->right);
int withRoot = leftWithout + rightWithout + node->val;
int withoutRoot = max(leftWith, leftWithout) + max(rightWith, rightWithout);
return make_pair(withRoot, withoutRoot);
}
int solve(Tree* root) {
auto [with, without] = dfs(root);
return max(with, without);
}
시간 복잡도
/**
* class Tree {
* public:
* int val;
* Tree *left;
* Tree *right;
* };
*/
pair<int, int> dfs(Tree* node) {
if (!node) return make_pair(0, 0);
auto [leftWith, leftWithout] = dfs(node->left);
auto [rightWith, rightWithout] = dfs(node->right);
int withRoot = leftWithout + rightWithout + node->val;
int withoutRoot = max(leftWith, leftWithout) + max(rightWith, rightWithout);
return make_pair(withRoot, withoutRoot);
}
int solve(Tree* root) {
auto [with, without] = dfs(root);
return max(with, without);
}
시간 복잡도
Reference
이 문제에 관하여(인접하지 않은 최대 트리 합계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jiangwenqi/maximum-non-adjacent-tree-sum-4g4l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)