Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int cnt;
- struct node
- {
- int data;
- struct node* left;
- struct node* right;
- };
- typedef struct node Node;
- Node* create_node(int item)
- {
- Node* new_node=new Node();
- if(new_node==NULL)
- cout<<"Error"<<endl;
- else
- {
- new_node->data=item;
- new_node->left=new_node->right=NULL;
- }
- return new_node;
- }
- Node* insert_key(Node* x,int key)
- {
- Node* new_node=create_node(key);
- if(x==NULL)
- return new_node;
- if(key>x->data)
- {
- x->right=insert_key(x->right,key);
- }
- else if(key<x->data)
- {
- x->left=insert_key(x->left,key);
- }
- return x;
- }
- bool Ancestors(struct node *root, int target)
- {
- if (root == NULL)
- return false;
- if (root->data == target)
- return true;
- if ( Ancestors(root->left, target) || Ancestors(root->right, target) )
- {
- cnt++;
- return true;
- }
- return false;
- }
- void find_node(Node *root, int level, int &maxLevel, int &res)
- {
- if (root != NULL)
- {
- find_node(root->left, ++level, maxLevel, res);
- if (level > maxLevel)
- {
- res = root->data;
- maxLevel = level;
- }
- find_node(root->right, level, maxLevel, res);
- }
- }
- int deepestNode(Node *root)
- {
- int res = -1;
- int maxLevel = -1;
- find_node(root, 0, maxLevel, res);
- return res;
- }
- int main()
- {
- Node* root=NULL;
- cnt=0;
- while(1)
- {
- int n;
- cin>>n;
- if(n!=-1)
- {
- root=insert_key(root,n);
- }
- else
- break;
- }
- int lastnode=deepestNode(root);
- Ancestors(root,lastnode);
- cout<<cnt<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment