求二叉树中两个节点的最低父节点

最低公共祖先算法
本文介绍了在树形结构中寻找两个节点的最低公共祖先(LCA)的算法。通过递归方式,利用先序或后续遍历的方法,实现了O(n)的时间复杂度。文中还提供了具体的伪代码供读者参考。
对于两个节点的最低父节点的定义可以分为两种情况(1)像5和8最低公共父节点是3,两节点之间不存在父子关系(2)两节点存在父子关系,如5和4,最低公共父节点是5。
引用维基百科的话:The lowest common ancestor (LCA) is a concept in graph theory and computer science. Let T be a rooted tree with n nodes. The lowest common ancestor between two nodes v and w is defined as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).
_______3______ / \ ___5__ ___1__ / \ / \ 6 _2 0 8 / \ 7 4

可以采用从顶往下的计算及先序遍历。也可以采用树的后续遍历来实现。相比较来说后续遍历更为简洁,时间复杂度最低为O(n)

Node *LCA(Node *root,Node *p,Node *q)
{
if(!root)
return NULL;
if(root==p||root==q)
return root;
Node *L=LCA(root->left,p,q);
Node *R=LCA(root->right,p,q);
if(L&&R)
return root;
return L?L:R;
}

 

转载于:https://www.cnblogs.com/dyc0113/archive/2013/03/25/2979983.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值