Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "arbol.h"
- int seEncuentra(TNode *node,TNode *p) {
- if (node == NULL) return 0;
- if (node == p) return 1;
- return seEncuentra(node->left, p) || seEncuentra(node->right, p);
- }
- TNode primerAncestro(TNode *nodo, TNode *p,TNode *q) {
- if (nodo == p || nodo == q) return *nodo;
- int pEnlaIzq = seEncuentra(nodo->left, p);
- int qEnlaIzq = seEncuentra(nodo->left, q);
- if (pEnlaIzq != qEnlaIzq) return *nodo;
- TNode *lado;
- if (pEnlaIzq) lado=nodo->left;
- else lado=nodo->right;
- return primerAncestro(lado, p, q);
- }
- int main(){
- TBinaryTree T;
- TNode q;
- init_tree(&T);
- insert(&T,5);
- insert(&T,3);
- insert(&T,7);
- insert(&T,1);
- insert(&T,4);
- insert(&T,6);
- insert(&T,8);
- insert(&T,0);
- q=primerAncestro(T.root,T.root->left->right,T.root->right);
- printf("%d\n",q.elem);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment