मान लीजिए हमारे पास संख्याओं का एक क्रम है; हमें यह जांचना होगा कि क्या यह बाइनरी सर्च ट्री का सही प्रीऑर्डर ट्रैवर्सल सीक्वेंस है। हम मान सकते हैं कि अनुक्रम में प्रत्येक संख्या अद्वितीय है। निम्नलिखित बाइनरी सर्च ट्री पर विचार करें -
इसलिए, अगर इनपुट [5,2,1,3,6] जैसा है, तो आउटपुट सही होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
आईटीआर:=-1
-
कम :=-इन्फिनिटी
-
इनिशियलाइज़ i :=0 के लिए, जब i <प्रीऑर्डर का आकार, अपडेट (i 1 से बढ़ाएँ), करें -
-
एक्स:=प्रीऑर्डर [i]
-
अगर x <कम है, तो -
-
झूठी वापसी
-
-
जबकि (itr>=0 और प्री-ऑर्डर[itr]
-
कम :=पूर्व-आदेश[itr]
-
(आईटीआर को 1 से घटाएं)
-
-
(आईटीआर को 1 से बढ़ाएं)
-
प्रीऑर्डर [itr] :=x
-
-
सही लौटें
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool verifyPreorder(vector<int<& preorder) { int itr = -1; int low = INT_MIN; for (int i = 0; i < preorder.size(); i++) { int x = preorder[i]; if (x < low) return false; while (itr >= 0 && preorder[itr] < x) { low = preorder[itr]; itr--; } itr++; preorder[itr] = x; } return true; } }; main(){ Solution ob; vector<int< v = {5,2,1,3,6}; cout << (ob.verifyPreorder(v)); }
इनपुट
{5,2,1,3,6}
आउटपुट
1