#include <iostream>
using namespace std;
struct Node
{
int val;
Node * left;
Node * right;
Node(int v):val(v),left(NULL),right(NULL){}
};
Node * lca(Node * a, Node * b, Node * root, int & appNum )
{
int lNum = 0, rNum = 0;
Node * lRet = NULL, * rRet = NULL;
if(root->left != NULL)
{
lRet = lca(a,b,root->left,lNum);
}
if(lNum == 2)
{
appNum = 2;
return lRet;
}
if(root->right != NULL)
{
rRet = lca(a,b,root->right,rNum);
}
if(rNum == 2)
{
appNum = 2;
return rRet;
}
appNum = 0;
if(root == a || root == b)
{
appNum++;
}
appNum += lNum;
appNum += rNum;
if(appNum == 2)
{
return root;
}
return NULL;
}
int main()
{
Node a(0), b(1), c(2),d(3),e(4);
a.left = &b;
a.right = &c;
b.left = &d;
b.right = &e;
int temp;
Node * r1 = lca(&a,&b,&a,temp);
Node * r2 = lca(&a,&d,&a,temp);
Node * r3 = lca(&b,&c,&a,temp);
Node * r4 = lca(&d,&e,&a,temp);
cout << r1->val << "\t";
cout << r2->val << "\t";
cout << r3->val << "\t";
cout << r4->val << "\t";
return 0;
}
二叉树的最小公共祖先(一次查询)
最新推荐文章于 2024-04-04 12:08:18 发布