求二叉树中两个节点的最近公共祖先节点

直接上代码把:

//查找二叉树结点的公共父节点
//递归方法求解
BiTree* LowestCommonAncestorInBinaryTree (BiTree *Root,char p,char q){ //真实传参应为(BiTree *Root,BiTree p,BiTree q)
																		//这里只是为了测试
	if(!Root)
		return NULL;
	//if(Root==p||Root==q) //真实代码
	//	return Root;

	if(Root->data==p||Root->data==q) //若子身结点是p,或者q。返回自身结点
		return Root;

	BiTree *left=LowestCommonAncestorInBinaryTree (Root->lchild,p,q); //在树的左方进行查找
	BiTree *right=LowestCommonAncestorInBinaryTree (Root->rchild,p,q); //在树的右面就行查找

	if(left!=NULL&&right!=NULL) //这里可以想象图中的B结点 从B的左面找到了 D所以left不空 从B的右面找到了M所以 right不空
		return Root;			//将B结点向上返回
	if(left==NULL&&right==NULL)	//上一层B返回后有 还会去A的右侧进行查找,看图可以知道A的右侧返回为NULl  
		return NULL;
	return left==NULL? right:left; //此时递归来到了最后一层代码因为 A的left不为空 所以最后的left 就是结果								
} 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值