สมมติว่าเรามี Binary Search Tree และค่าเป้าหมายหนึ่งค่า เราต้องตรวจสอบว่ามีองค์ประกอบสองประการใน BST หรือไม่ เพื่อให้ผลรวมของพวกมันเท่ากับเป้าหมายที่กำหนดหรือไม่
ดังนั้นหากอินพุตเป็นแบบ
แล้วผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ v
-
กำหนดฟังก์ชัน inorder() ซึ่งจะทำการรูท
-
ถ้ารูทเป็นโมฆะ −
-
กลับ
-
-
inorder(ด้านซ้ายของรูท)
-
แทรกค่าของรูทลงใน v
-
inorder(ด้านซ้ายของรูท)
-
กำหนดฟังก์ชัน findnode() ซึ่งจะใช้เวลา k
-
n :=ขนาดของวี
-
ในขณะที่ฉัน
-
t :=v[i] + v[j]
-
ถ้า t เหมือนกับ k แล้ว −
-
คืนความจริง
-
-
ถ้า t
-
(เพิ่ม i ขึ้น 1)
-
-
มิฉะนั้น
-
(ลด j โดย 1)
-
-
-
คืนค่าเท็จ
-
จากวิธีหลัก ให้ทำดังต่อไปนี้ −
-
inorder(root)
-
จัดเรียงอาร์เรย์ v
-
ส่งคืน findnode(k)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = NULL; right = NULL; } }; void insert(TreeNode **root, int val){ queue<TreeNode*> q; q.push(*root); while(q.size()){ TreeNode *temp = q.front(); q.pop(); if(!temp->left){ if(val != NULL) temp->left = new TreeNode(val); else temp->left = new TreeNode(0); return; } else{ q.push(temp->left); } if(!temp->right){ if(val != NULL) temp->right = new TreeNode(val); else temp->right = new TreeNode(0); return; } else{ q.push(temp->right); } } } TreeNode *make_tree(vector<int> v){ TreeNode *root = new TreeNode(v[0]); for(int i = 1; i<v.size(); i++){ insert(&root, v[i]); } return root; } class Solution { public: vector<int> v; void inorder(TreeNode* root){ if (root == NULL || root->val == 0) return; inorder(root->left); v.push_back(root->val); inorder(root->right); } bool findnode(int k){ int n = v.size(), i = 0, j = n - 1; while (i < j) { int t = v[i] + v[j]; if (t == k) return true; if (t < k) i++; else j--; } return false; } bool findTarget(TreeNode* root, int k){ inorder(root); sort(v.begin(), v.end()); return findnode(k); } }; main(){ Solution ob; vector<int> v = {5,3,6,2,4,NULL,7}; TreeNode *root = make_tree(v); cout << (ob.findTarget(root, 9)); }
อินพุต
{5,3,6,2,4,NULL,7},9
ผลลัพธ์
1