在中序线索二叉树中找前驱;
BiTNode* Inpre(BiTree *p , BiTNode *pre)
{
BiTNode *q;
if(p->Ltag==1)
pre=p->Lchild // 空的左孩子指针指向,结点前驱 1 表示前驱存在;
// 当该节点为孩子结点时,
//返回以p为根的lDR 即为最右下端的结点;
else
{
for(q=p->Lchild ; Q->Rtag==0 ; q=q->Rchild)
pre=q;
}
return (pre);
}
在中序线索二叉树中找后继;
BiTNode* InNext(BiTree *p , BiTNode *Next)
{
BiTNode *q;
if(p->Rtag==1)
Next=p->Rchild // 空的左孩子指针指向,结点前驱 1 表示前驱存在;
else
{
// 在p右 子树中查找最左下端;
if(Rchild!=NULL) {
for(q=p->Rchild ; Q->tag==0 ; q=q->Lchild) //为孩子时就一直向q->Lchild 找;
Next=q;
}
else
Next=NULL;
}
return (Next);
}
遍历中序线索二叉树
(1)在中序线索二叉树求中序遍历的第一个结点;
BiTrNode* InFirst (BiTree *bt)
{
BiTrNode *p=bt;
if(!p) return NULL; //空二叉树;
while(p->Ltag==0) // 中序访问LDR
p=p->Lchild;
return p;
}
(2) 遍历中序二叉树,通过调用InFirst 和InNext可以实现对中序二叉树的遍历,且不须要使用栈;
void TInorder(BiTree Bt)
{
BiTNode *p;
p=InFirst(Bt) //找到首结点;
while(p)
{
visit(p) //拜访p
p=InNext(p); //对每个结点找他的后继 ,并将找到的后继结点赋给p , 进行下一次的循环;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。