線索二叉樹相關問題
阿新 • • 發佈:2021-10-28
線索二叉樹相關問題
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);
}
}