1. 程式人生 > 其它 >線索二叉樹相關問題

線索二叉樹相關問題

線索二叉樹相關問題

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);
    }
}