Two Sum Of Binary Tree
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.
Example
Input: [5, 3, 6, 2, 4, null, 7] Target = 9 Output: True
My Solutions
迭代 두 갈래 나무는 매 결점을 통과할 때 노드 데이터를 수조에 저장하고 노드 데이터와 수조의 데이터를 일치시킨다.
class Solution {
public:
bool findTarget(TreeNode* root, int k) {
vector nums;
stack nodeStack;
TreeNode* current = root;
while (current != NULL || !nodeStack.empty()){
while (current != NULL){
//visit the node
if (isExistTarget(nums, current->val, k)) return true;
nums.push_back(current->val);
nodeStack.push(current);
current = current->left;
}
if (!nodeStack.empty()){
current = nodeStack.top();
nodeStack.pop();
current = current->right;
}
}
return false;
}
private:
bool isExistTarget(vector& nums, int nodeVal, int k){
for (int i = 0; i < nums.size(); i++){
if (nums[i] + nodeVal == k) return true;
}
return false;
}
};
최악의 경우 비교 횟수(n2+n)/2이며,size가 n인 수조 공간 보조 계산이 필요하다.(n은 트리 포인트) 시간 복잡도 O(N) = O(n2) 는 유일한 알고리즘이 아니라는 것이 분명하다. 매우 단순한 내가 보기에 문제풀이다.And...
More Solutions
는 해시표를 사용하여 보조 연산을 한다.이 알고리즘의 사상은 상술한 알고리즘 사상과 약간 유사하다.다만 실현 방식이 다르다.
class{
public:
bool findTarget(TreeNode* root, int k) {
unordered_set set;
return dfs(root, set, k);
}
private:
bool dfs(TreeNode* root, unordered_set& set, int k){
if(root == NULL)return false;
if(set.count(k - root->val))return true;
set.insert(root->val);
return dfs(root->left, set, k) || dfs(root->right, set, k);
}
};
우리 다음 우아하고 효율적인 알고리즘을 봅시다.
class{
public:
bool findTarget(TreeNode* root, int k) {
return dfs(root, root, k);
}
private:
bool dfs(TreeNode* root, TreeNode* cur, int k){
if(cur == NULL)return false;
return search(root, cur, k - cur->val) || dfs(root, cur->left, k) || dfs(root, cur->right, k);
}
bool search(TreeNode* root, TreeNode *cur, int value){
if(root == NULL)return false;
return (root->val == value) && (root != cur)
|| (root->val < value) && search(root->right, cur, value)
|| (root->val > value) && search(root->left, cur, value);
}
};
(root->val < value) && search(root->right, cur, value)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.