Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में बाइनरी ट्री का राइट साइड व्यू


मान लीजिए हमारे पास एक बाइनरी ट्री है, यदि हम ट्री को दाईं ओर से देखते हैं, तो हम इसके कुछ एलिमेंट्स देख सकते हैं। हमें उन एलिमेंट्स को प्रदर्शित करना होगा। तो यदि ट्री इस तरह है −

C++ में बाइनरी ट्री का राइट साइड व्यू

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −

  • हम dfs के लिए एक हेल्पिंग मेथड बनाएंगे। यह tree_node, उत्तरों को रखने के लिए एक ऐरे, और लेवल लेगा। लेवल प्रारंभ में 0 है। dfs नीचे की तरह काम करेगा −
  • यदि नोड null है, तो लौटें
  • यदि लेवल = उत्तर ऐरे की लंबाई, तो नोड के मान को ans ऐरे में डालें
  • dfs(नोड का राइट, ans, लेवल + 1)
  • dfs(नोड का लेफ्ट, ans, लेवल + 1)
  • मुख्य फंक्शन से ट्री के रूट और एक खाली ऐरे का उपयोग करके dfs() को कॉल करें, लेवल प्रारंभ में 0 है, इसलिए यह dfs(root, ans) होगा

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

उदाहरण

#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class TreeNode{    public:       int val;       TreeNode *left, *right;       TreeNode(int data){          val = data;          left = 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:    void dfs(TreeNode* node, vector <int>& ans, int level = 0){       if(!node) return;       if(level == ans.size())ans.push_back(node->val);       dfs(node->right, ans, level + 1);       dfs(node->left, ans, level + 1);    }    vector<int> rightSideView(TreeNode* root) {       vector <int> ans;       dfs(root, ans);       return ans;    } }; main(){    vector<int> v = {1,2,3,NULL,5,NULL,4};    TreeNode *root = make_tree(v);    Solution ob;    print_vector(ob.rightSideView(root)); }

इनपुट

[1,2,3,null,5,null,4]

आउटपुट

[1, 3, 4, ]

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्

  1. C++ में अधिकतम बाइनरी ट्री निर्माण C++ में अधिकतम बाइनरी ट्री निर्माण

    मान लीजिए हमारे पास एक पूर्णांक सरणी है जिसके सभी तत्व अद्वितीय हैं। एक अधिकतम बाइनरी ट्री निम्न नियमों से बनता है: रूट सरणी का अधिकतम तत्व होता है। बायाँ सबट्री अधिकतम तत्व के बाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है। दायाँ सबट्री अधिकतम तत्व के दाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है।

  1. C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण

    एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है। एक साधारण बाइनरी ट्री है - बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का ट्री है जो निम्नलिखित नियमों का पालन करता है - बाएं चाइ