Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include<iostream>
- #include<fstream>
- using namespace std;
- ////////////////////////
- struct treeNode
- {
- treeNode* left;
- treeNode* right;
- int data;
- };
- ///////////////////////
- struct stackNode
- {
- stackNode* next;
- treeNode* node;
- };
- //////////////////////
- void push_tree(treeNode* &tree_top, int x)
- {
- treeNode *p, *m;
- bool b;
- if (tree_top == NULL)
- {
- m = new treeNode;
- m->data = x;
- m->left = NULL;
- m->right = NULL;
- tree_top = m;//root
- }
- else
- {
- m = tree_top;
- b = true;
- while (b)
- {
- if (x >= m->data)
- {
- if (m->right)
- m = m->right;
- else
- {
- p = new treeNode;
- p->data = x;
- p->left = NULL;
- p->right = NULL;
- m->right = p;
- b = false;
- }
- }
- else
- {
- if (m->left) m = m->left;
- else
- {
- p = new treeNode;
- p->data = x;
- p->left = NULL;
- p->right = NULL;
- m->left = p;
- b = false;
- }
- }
- }
- }
- }
- /////////////////////////////////////////////////
- void push_stack(stackNode* &stack_top, treeNode* t)
- {
- stackNode* p;
- p = new stackNode;
- p->node = t;
- p->next = stack_top;
- stack_top = p;
- }
- //////////////////////////////////////////////////////////////
- void create_tree(ifstream &f, treeNode* &tree_top)
- {
- tree_top = NULL;
- int x;
- while (f >> x)
- {
- push_tree(tree_top, x);
- }
- }
- /////////////////////////
- void pop_stack(stackNode* &stack_top, treeNode* &t)
- //get node of tree from stack
- {
- stackNode *p;
- if (stack_top)
- {
- t = stack_top->node;
- p = stack_top->next;
- delete stack_top;
- stack_top = p;
- }
- }
- /////////////////////////////////////////////////////////////
- void print_node(int x)
- {
- cout << " " << x;
- }
- ////////////////////////////
- void inorder_tree(treeNode* tree_top)//печать обход в глубину (по порядку) с левым уклоном
- {
- stackNode* stack_top;
- treeNode* tree_p;
- tree_p = tree_top;
- stack_top = NULL;
- do
- {
- while (tree_p)
- {
- while (tree_p->left)
- {
- push_stack(stack_top, tree_p);
- tree_p = tree_p->left;
- }
- print_node(tree_p->data);
- tree_p = tree_p->right;
- }
- if (stack_top)
- {
- pop_stack(stack_top, tree_p);
- print_node(tree_p->data);
- tree_p = tree_p->right;
- }
- } while (stack_top || tree_p);
- cout << endl;
- }
- void EtaskA(treeNode* &tree_top, int e, bool &f)
- {
- if (tree_top && !f)
- {
- if (tree_top->data == e)
- {
- f = true;
- }
- else
- {
- EtaskA(tree_top->left, e, f);
- EtaskA(tree_top->right, e, f);
- }
- }
- }
- void EtaskB(treeNode* &tree_top, int e, int&k)
- {
- if (tree_top)
- {
- if (tree_top->data == e)
- k++;
- EtaskB(tree_top->left, e, k);
- EtaskB(tree_top->right, e, k);
- }
- }
- void EtaskC(treeNode* &tree_top, int&s)
- {
- if (tree_top)
- {
- s += tree_top->data;
- EtaskC(tree_top->left, s);
- EtaskC(tree_top->right, s);
- }
- }
- void EtaskD(treeNode* &tree_top, int&max)
- {
- if (tree_top)
- {
- if (tree_top->data>max)
- max = tree_top->data;
- EtaskD(tree_top->left, max);
- EtaskD(tree_top->right, max);
- }
- }
- void EtaskE(treeNode* &tree_top)
- {
- if (tree_top)
- {
- if (!tree_top->left && !tree_top->right)
- {
- cout << tree_top->data << ' ';
- }
- else
- {
- EtaskE(tree_top->left);
- EtaskE(tree_top->right);
- }
- }
- }
- void EtaskF(treeNode* &tree_top, int &k, int &max, int&temp)
- {
- if (tree_top)
- {
- if (!tree_top->left && !tree_top->right)
- {
- if (k > max)
- max = k;
- k = temp;
- }
- else
- {
- if (tree_top->left && tree_top->right)
- {
- temp = k;
- }
- k++;
- EtaskF(tree_top->left,k,max,temp);
- EtaskF(tree_top->right,k,max,temp);
- }
- }
- }
- int main()
- {
- ifstream f("Text.txt");
- int x;
- treeNode* tree_top;
- create_tree(f, tree_top);
- f.close();
- inorder_tree(tree_top);
- /*bool t = false;
- if (tree_top)
- {
- EtaskA(tree_top, 11, t);
- if (t)
- cout << "Yes" << endl;
- else
- cout << "No" << endl;
- }
- else
- cout << "Tree is empy" << endl;*/
- /*int k = 0;
- if (tree_top)
- {
- EtaskB(tree_top, 19,k);
- cout << k << endl;
- }
- else
- cout << "Tree is empy" << endl; */
- /*int s = 0;
- EtaskC(tree_top, s);
- cout << s << endl;*/
- /*int max = tree_top->data;
- EtaskD(tree_top, max);
- cout << max << endl;*/
- /*if (tree_top)
- EtaskE(tree_top);
- else
- cout << "Tree is empy" << endl;*/
- int max = 0, k = 0, temp = 0;
- EtaskF(tree_top, k, max, temp);
- cout << max << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment