算法思想:采用非递归后序遍历,最后访问根结点,当访问到值为x的结点时,栈中所有元素均为该结点的祖先,依次出栈打印即可。
int PrintParent_1(TNode* &p,char x)
{
Stack S;
InitStack(S);
TNode* r=NULL;
while(!StackEmpty(S)||p!=NULL)
{
if(p!=NULL)
{
Push(S,p);
p=p->lchild;
}
else
{
GetTop(S,p);
if(p->data==x)
{
Pop(S,p);
while(StackEmpty(S)!=true)
{
Pop(S,p);
visit(p);
}
return 0;
}
if(p->rchild!=NULL&&p->rchild!=r)
p=p->rchild;
else
{
Pop(S,p);
//visit(p);
r=p;//标记右孩子已经访问过了
p=NULL;//访问完一个结点之后需要置空,不置空的话又会把这个结点压进去
}
}
}
}
王道课后习题4.3.12:在二叉树中查找值为x的结点,打印值为x的结点的所有祖先,假设值为x的结点不多于一个
最新推荐文章于 2022-05-11 16:38:04 发布
本文介绍一种非递归实现的后序遍历算法,用于在一棵二叉树中查找特定节点的所有祖先。通过使用栈来辅助遍历过程,当找到目标节点时,栈内元素即为该节点的所有祖先。

1万+





