编写算法找到二叉树中任意两个结点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

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

562

被折叠的 条评论
为什么被折叠?



