线索二叉树相关问题
1.在先序线索二叉树中求解指针P的后继结点
binode presuc(Binode *p){
if(p->rtag==1)
return p->rchild;
else if(p->ltag==0)
return p->lchild;
else
return p->rchild;
}
2.在中序线索二叉树钟求解指针P的后继结点
binode insuc(Binode *p){
binode *q=p->rchild;
if(p->rtag==1)
return p->rchild;
else{
while(q->ltag==0)
q=q->lchild;
return q;
}
}
3.中序线索二叉树中求解指针p的前驱结点
binode insuc(Binode *p){
binode *q=p->lchild;
if(p->ltag==1)
return p->lchild;
else{
while(q->rtag==0)
q=q->rchild;
return q;
}
}
4.后序线索二叉树中求解指针P的前驱结点
binode postsuc(Binode *p){
if(p->ltag==1)
return p->lchild;
else if(p->rtag==0)
return p->rchild;
else
return p->lchild;
}
5.按先序次序遍历先序线索二叉树的非递归算法
void preorder(Binode *T){
binode *p=T;
while(p!=NULL){
cout<<p->data;
if(p->rtag==1)
p=p->rchild;
else if(p->ltag==0)
p=p->lchild;
else
p=p->rchild;
}
}
6按中序遍历先序线索二叉树的非递归算法
void inorder(Binode *T){
binode *p=T;
//找到首结点
while(p->ltag==0)
p=p->lchild;
//从首结点开始遍历
while(p!=NULL){
visite(p);
//找后继
p=insuc(p);
}
}