编写算法找到二叉树中任意两个结点p和q的最近公共祖先结点r

本文介绍了如何使用后序非递归算法寻找二叉树中两个结点p和q的最近公共祖先结点r。通过创建辅助栈,将遍历过程中遇到的节点祖先存入,然后比较两个辅助栈中相同位置的元素,找到最近公共祖先。

编写算法找到二叉树中任意两个结点p和q的最近公共祖先结点r

采用后序非递归算法,栈中存放二叉树结点的指针,当访问到某节点时,栈中所有元素均为该结点的祖先,然后将这些元素复制到一个辅助栈中。最后把两个辅助栈当成两个普通数组,从0号元素开始访问,相同则记录位置,不同则退出,返回最后记录的位置的结点,就是最近公共祖先。

栈的基本操作以严蔚敏编写的教材为准。

BiTree Ancestor(BiTree T, BiTNode *p, BiTNode *q)
{
   
   
	BiTNode *t = T, *r = NULL; //t为遍历指针,r为辅助指针,指向最近访问过的结点
	InitStack(S); //初始化栈S,辅组栈S1,S2
	InitStack(S1);
	InitStack(S2);
	while (t || !StackEmpty(S)) //t不空或栈不空,则循环
	{
   
   
		if (t) //一直走到最左边
		{
   
   
			push(S
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值